(NET) NET (2014)

Класифікація засобів роботи з даними.

На цієї сторінці, друзі, я хотів поділитися своїм баченням еволюції застосування засобів моделювання та маніпулювання даними та підкреслити особливості та умови використання тієї чи іншої технології. Це детальне пояснення правого верхнього варіанта на моєї загальної діаграмі варіантів ASP.NET стека - Variants of ASP NET Technology stack.


Також існує безліч окремих ВІЗУАЛЬНИХ інструментів, які дуже добре інтегровані у Visual Studio, мають десятки окремих форм дня налаштування різноманітних аспектів доступу до даних, почніть будь ласка читати з цієї нотатки - 10 ORM and Data Tier Management Tools for Visual Studio, але все, що пов'язано з мікрософтом постійно змінюється та зникає із інету, тому я на всяк випадок перерахую тут дещо:

Існує і безліч інших, ніяк не інтегрованих у студію, окремих, але дуже корисних інструментів, таких як LINQPad.


Щоб якось розібратися у цьому, я пропоную свою класифікацію, яка побудована на тому, як я особисто поступово освоював одну технологію за іншою, ніяк не залишаючи остаточно жодну з них (ну наприклад як можливо залишити SQL-Сервер?). Найбільш важливо, ще раз підкреслюю - вибрати найбільш правильну технологію. Ось наприклад стандартний CheckList для виконання вибору між двома ORM (коли вже рішення про застосування ORM порівняно з іншими варіантами доступу до даних прийнято).


1. Моделювання та маніпуляція даними у межах SQL-Серверу


MS SQL Server це не разу не табли, як це вважають деякі програмісти, що зрозуміти це - подивиться будь ласка на цей перелік спеціфічних об'єктів, яких немає у інших SQL-серверах: Aggregate, Application Role, Assembly, Asymmetric Key, Broker Priority, Certificate, Check Constraint, CLR Database Trigger, CLR Instead Of Trigger, CLR Procedure, CLR Scalar Function, CLR Server Trigger, CLR Table Function, CLR Trigger, ColumnStore Index, Contract, Credential, Cryptographic Provider, Custom Message, Database Audit Specification, Database Encryption Key, Database Role, Database Scoped Credential, Database Trigger, Default Constraint, Default, Endpoint (ServiceBroker over TCP), Endpoint (SOAP over HTTP), Event Notification, Event Session, Extended Property, External Data Source, External File Format, External Table, File, FileGroup MemOpt, FileGroup With Filestream, FileGroup, FileTable, Foreign Key, Full Text Stoplist, Fulltext Catalog, Fulltext Index, Index, Inline Function, Instead Of Trigger, Linked Server Login, Linked Server, Log File, Login SqlServer, Login, Master Key, Message Type, Partition Function, Partition Scheme, Primary Key, Procedure NativeComp, Procedure, Queue, Remote Service Binding, Route, Rule, Scalar Function, Schema, Script Build, Script, Search Property List, Security Policy, Selective XML Index, Sequence, Server Audit Specification, Server Audit, Server Role, Server Trigger, Service, Signature, Spatial Index, Statistics, Svr Role Membership, Symmetric Key, Synonym, Table Function, Table MemOpt with Filegroup, Table MemOpt, Table SysVersioned, Table, Trigger, Type, Unique Key, User Defined Table Type MemOpt, User Defined Table Type, User with Password, User, User-defined Type, View, XML Index, XML Schema Collection (xsd).vstemplate, XML Schema Collection. І це лише деякі додаткові нові об'єкти нової версії MS SQL, а існує тисячі інших, які підтримуються це з SQL 7, у мене є перелік тисячі специфічних об'єктів SQL 2000 - Transact-SQL Reference for SQL 2000.

Мені подобається працювати у середовищі MS SQL і сьогодні я могу зробити будь який важкий проєкт у MS SQL, ось наприклад запис моєї реальної роботи у 2017-му році - My project for refactoring huge database to prepare using it in Entity Framework.

Я веду на своєму сайті окремий розділ, присвячений програмуванню inside SQL - Программирование в SQL SERVER, також на безлічі інших сторінок ви можете побачити ті чи інші рішення, стосовно використання специфічних запросів у SQL. Все перерахувати неможливо, бо я веду цей сайт на протязі, мабуть, років 15-ти, почните читати про програмування SQL-процедур з цих чотирьох сторінок:

MS SQL Server має можливість поширення власними функціями у будь-якому напрямку, наприклад звичайно ці функції ходять по таймеру у інет, щось так скачують, парсять, кудись зберігають результати. У мене є деякі описи моїх власних поширень MS SQL server:


2. Отримання даних за допомогою DAO


Це засіб був поширений у класичному ASP та VB6. У мене майже не збереглося будь-яких описів з тих часів часу, є лише окремі сторінки - ось тут наприклад перераховані деякі мої проєкти на VB6 з описами, які я виконував ще до 2005 року. Взагалі, коли я ближче познайомився з NET Framework у 2002-2003 роках (ось тут історичні скрини 2002-го року, та мої перші емоцій тих часів), то я спочатку трохи здивувався, потім з'явилося незадоволення можливостями VB6, а потім я став використовувати більш нові технології замість DAO.


3. Отримання даних за допомогою ADO.NET (SqlCommand/SqlDataReader)


Це дуже простий та корисний засіб використання реквестів до даних SQL-серверу. У мене є багато проєктів, описаних саме на цьому фреймворці, наприклад :


4. Отримання даних за допомогою SqlDataSource (через декларації ASP.NET або власним кодом)


Мені подобається використовувати цей зручний засіб. Ви можете подивитися, як я це роблю.


5. Отримання даних за допомогою TableAdapter and SqlDataAdapter, Typed and Untyped DataSet


Інколи я використовую цей засіб роботи з даними. Починалося це все з NET 1.1 e 2002-році ADO .NET, ADO .NET. Потім я написав багато програм з використанням цього засобу роботи з даними, у мене збереглося декілька описів тих старих програм і навіть у мене є описи Extension-функцій до цього фреймфорку:


Я і зараз активно використовую цю технологію у десктопних програмах. Також ця технологія активно використовується у деяких інших випадках, наприклад у DataTable імпортуються Excel-файли.


6. Отримання даних за допомогою ORM Linq-to-SQL


Якщо ви користуєтесь лише MS SQL та не плануєте його змінювати на протязі життя проєкту, то жодного сенсу немає використовувати Entity Framework. Щоб там не казав мікрософт. З іншого боку, якщо ви маєте доступ до SQL-сервера, теж немає жодного сенса використовувати Entity Framework, набагато зручніше виконувати тести не за допомогою специфічних технологій Unit-тести для ASP.NET MVC, а безпосередньо за допомогою тестових даних у SQL-сервері.

Якщо ви працюєте як фрілансер і вашою метою є найшвидчий результат, або ви працюєте у проекті один, то на мій погляд - це найкращий фреймворк. Я почав використовувати цей фреймворк у 2010-му році - Мой первый сайт на MVC 3 Razor, Извлекаем пользу из LINQ і з того часу всі мої проекти за окремими винятками, описаних у розділах Программирование в NET Framework, Программирование на ASP NET, Программирование на ASP NET MVC зроблені переважно на Linq-to-SQL, наприклад

Я маю також декілька власних поширень Linq-to-SQL, подивиться будь ласка ось цю сторінку 2013 року - Five amazing Linq-to-SQL extension на англійській мові, та Мої поширення Linq-to-SQL на українській мові. Та ось цю сторінку від 2017-го року Amazing extension function CopyLinqDataMembersByName to expand Linq-to-SQL на англійській мові.

Цікаво, що я спочатку не дуже добре сприймав цю технологію, зараз я лише дивуюсь своєму критичному погляду від 2010-го року.


7. Отримання даних за допомогою ORM Entity Framework


Якщо спробувати сказати щось глобальне про цей фреймворк, то він дозволяє робити те ж саме, що й Linq-to-SQL, але з трьома головними додатками:

  • Ви можете змінювати двигун бази на протязі життєвого циклу своєї програми, тобто крім MS SQL ви можете використовувати будь-яке дискове сховище даних, починаючи від MongoDB - noSQL-database for irregular JSON data. Зрозуміло, що при такому погляді на дані, нічого специфічного з SQL-серверу ви використовувати не можете, ну наприклад Assembly, бо їх немає в жодної іншої технології зберігання даних, крім Оракла.
  • Інша дуже важлива особливість цбго фреймворку - його пристосованість до Unit-тестів. Це важливо для великих проєктів, коли хтось один робить код, інший робить з ним тести і робить релізи.
  • Цей фремворк пітримує методику проєктування Code First. Це коли базу програму хто-небудь іншій у іншій країні, ви взагалі про це нічого не знаєте, але вам необхідно проєктувати сайт окремо, взагалі без бази, лише на теоретичних моделях-классах, з яких потім Entity Framework буде створювати SQL-структуру. Все це зроблено для підтримки технології Global Outsource.
  • Наразі я маю повний опис усіх можливостей Entity Framework на своєму сайті, а також декілька моїх власних описів лише декілька окремих топіків.



    Comments ( )
    Link to this page: //www.vb-net.com/DataAccessReview/index.htm
    < THANKS ME>