Класифікація засобів роботи з даними.
На цієї сторінці, друзі, я хотів поділитися своїм баченням еволюції застосування засобів моделювання та маніпулювання даними та підкреслити особливості та умови використання тієї чи іншої технології. Це детальне пояснення правого верхнього варіанта на моєї загальної діаграмі варіантів ASP.NET стека - Variants of ASP NET Technology stack.
- По-перше, даними краще за все маніпулювати взагалі безпосередньо у SQL-сервері, особливо яко це стосується великих об'ємів даних.
- По-друге, існує декілька дуже зручних засобів маніпуляції даними, таких як наприклад декларативний синтаксис ASP.NET і декілька нібито перехідних засобів, які з одного боку не є повноцінними ORM, але надзвичайно зручні, прості та корисні при правильному використанні.
- По-трете, існує багато повноцінних ORM, починаючи з ORM для VB6, але далі ми будемо казати лише про ORM для .NET.
Стосовно ORM для .NET, то їх існує багато:
- DatabaseObjects .NET, це той самий ORM, який працює у VB6
- LINQ to SQL - цей ORM мені подобаться більше всіх інших, коли мене нічого не тримає, я вибираю саме його.
- Entity Framework - розглянемо його можливості нище
- FluentMigratork - у деяких проєктаї це уикористовується.
- NHibernate
- Base One Foundation Component Library
- DataObjects.NET
- Dapper
- ECO
- EntitySpaces
- iBATIS
- Neo
- nHydrate
- Persistor.NET
- Quick Objects
- SubSonic
- XPO
Також існує безліч окремих ВІЗУАЛЬНИХ інструментів, які дуже добре інтегровані у Visual Studio, мають десятки окремих форм дня налаштування різноманітних аспектів доступу до даних, почніть будь ласка читати з цієї нотатки - 10 ORM and Data Tier Management Tools for Visual Studio, але все, що пов'язано з мікрософтом постійно змінюється та зникає із інету, тому я на всяк випадок перерахую тут дещо:
- CodeTrigger Code Generator & ORM
- Irwsoft Data Framework
- LLBLGen Pro
- nHydrate ORM Modeler
- ORMapster
- ORM Profiler
- Simple Data Access Layer
- SQLite for Universal App Platform
- SubSonic
- Telerik Data Access
Існує і безліч інших, ніяк не інтегрованих у студію, окремих, але дуже корисних інструментів, таких як LINQPad.
Щоб якось розібратися у цьому, я пропоную свою класифікацію, яка побудована на тому, як я особисто поступово освоював одну технологію за іншою, ніяк не залишаючи остаточно жодну з них (ну наприклад як можливо залишити SQL-Сервер?). Найбільш важливо, ще раз підкреслюю - вибрати найбільш правильну технологію. Ось наприклад стандартний CheckList для виконання вибору між двома ORM (коли вже рішення про застосування ORM порівняно з іншими варіантами доступу до даних прийнято).
- 1. Моделювання та маніпуляція даними у межах SQL-Серверу
- 2. Отримання даних за допомогою DAO
- 3. Отримання даних за допомогою ADO.NET (SqlCommand/SqlDataReader)
- 4. Отримання даних за допомогою SqlDataSource (через декларації ASP.NET або власним кодом)
- 5. Отримання даних за допомогою TableAdapter and SqlDataAdapter, Typed and Untyped DataSet
- 6. Отримання даних за допомогою ORM Linq-to-SQL
- 7. Отримання даних за допомогою ORM Entity Framework
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-процедур з цих чотирьох сторінок:
- 2011 year: Хранение в MS SQL сетевой топологии и отборы маршрутов рекурсивными CTE-процедурами.
- 2010 year: Выполняем разворот строк в столбцы в MS SQL и PostgreSQL
- 2010 year: Хранение графики в SQL-сервере
- 2008 year: Cекционирование графики при SQL-хранении.
MS SQL Server має можливість поширення власними функціями у будь-якому напрямку, наприклад звичайно ці функції ходять по таймеру у інет, щось так скачують, парсять, кудись зберігають результати. У мене є деякі описи моїх власних поширень MS SQL server:
- 2010 year: SqlClr_IndexCryptoProtector - криптографическая защита индексов SQL-сервера с помощью SQL CLR сборки.
- 2010 year: Реализация таймаута на динамически создаваемых SQL JOB, вызывающих SQL CLR сборку.
- 2009 year: SQL-Client_for_remote_XML-WebService - client of meteonova.ru
- 2009 year: Как парсить XML SOAP в MS SQL
- 2009 year: Выполнение периодических задач в ASP.NET
- 2008 year: Сборка для работы с данными стандартных ASP.NET-профилей на уровне SQL
- 2005 Защита параметров странички от подделки
2. Отримання даних за допомогою DAO
Це засіб був поширений у класичному ASP та VB6. У мене майже не збереглося будь-яких описів з тих часів часу, є лише окремі сторінки - ось тут наприклад перераховані деякі мої проєкти на VB6 з описами, які я виконував ще до 2005 року. Взагалі, коли я ближче познайомився з NET Framework у 2002-2003 роках (ось тут історичні скрини 2002-го року, та мої перші емоцій тих часів), то я спочатку трохи здивувався, потім з'явилося незадоволення можливостями VB6, а потім я став використовувати більш нові технології замість DAO.
3. Отримання даних за допомогою ADO.NET (SqlCommand/SqlDataReader)
Це дуже простий та корисний засіб використання реквестів до даних SQL-серверу. У мене є багато проєктів, описаних саме на цьому фреймворці, наприклад :
- 2015 year: SiteRequestTracer - Система аналізу і трасування усіх реквестів до сайту.
- 2012 year: FileStream в MS SQL.
- 2012 year: WinDump - снимок состояния системы с помощью WMI,
- 2011 year: Как сделать SOAP/WSDL-вебсервис на ASP.NET/MONO для вызова его из FLEX
- 2011 year: Мой первый фото-слайдер на Flex 4
- 2010 year: SqlClr_IndexCryptoProtector - криптографическая защита индексов SQL-сервера с помощью SQL CLR сборки.,
- 2010 year: ADO.NET обвязка для работы с MySQL в ASP.NET-сайтах под Windows,
- 2010 year: SqlPerfomanceHandler - выполнение удаленных запросов к СУБД notlisted
- 2010 year: Хранение графики в SQL-сервере nolist
- 2010 year: Делаем SEO SiteMap.
- 2009 year: Этюды на ASP2. Делаем RSS-канал на одной SQL-процедуре,
- 2009 year: Шлюзы к платежным системам интернет-денег.
- 2009 year: Счетчики на Web-страничках.
- 2009 year: OpenSource-проекты для работы с видео и торрентами.
- 2009 year: Xping - утилита контроля качества связи
- 2009 year: Как парсить XML SOAP в MS SQL
- 2009 year: Этюды на ASP2. Обращение к Whois-сервису.
- 2008 year: Сборка для работы с данными стандартных ASP.NET-профилей на уровне SQL
- 2008 year: Cекционирование графики при SQL-хранении.
- 2007 year: Скачка, раззиповка, перекодирование, парсинг и укладка в базу ЖД-расписания из АСУ Экспресс-3,
- 2007 year: Вариации на тему Notification-сервера
- 2007 year: Наблюдение за Web-приложениями
- 2006 year: code fragment of site SOFT-HELP.RU
- 2006 year: Наложение копирайта на рисунки
- 2006 year: Асинхронные странички
- 2006 year: code fragment of site SOFT-HELP.RU
- 2005 year: Защита параметров странички от подделки
- 2005 year: SQLBatchbad encode
- 2005 year: Доступ к данным (Перевод Александра Гладченко), notitle
- 2005 year: how to start asp.net notitle
- 2004 year: разгрузка почтовой базы из OutLook в SQL. bad encode
4. Отримання даних за допомогою SqlDataSource (через декларації ASP.NET або власним кодом)
Мені подобається використовувати цей зручний засіб. Ви можете подивитися, як я це роблю.
- 2021 year: Microservice with report of QEMU-KVM server (VirtualMachines, Storage, Network). Also demo of Linq, Lambda, Inheritance model.
- 2016 year: SPA-page на Classic ASP.NET та jQuery.
- 2012 year: Долгоиграющие странички с прогресс-баром.
- 2012 year: Общий шаблон простейшего приложения на ASP NET MVC.
- 2010 year: Этюды на ASP.NET. Вложенный (nested) Datalist.
- 2010 year: Избавляемся от базы стандартных пользователей ASP.NET на MS SQL - пример ASP.NET сайта на MySQL.
- 2010 year: Мой первый сайт на MVC 3 Razor
- 2009 year: Используем MySQL вместо MS SQL в проектах на ASP.NET
- 2009 year: ExchangeLogAnalyzer - OpenSource парсер журнала MS Exchange Server.
- 2008 year: Этюды на ASP2. Простейший баг-трекер.
- 2008 year: Практическое применение наследования, полиморфизма, интерфейсов, дженериков и делегатов на примерах в Visual Basic .NET
- 2008 year: Базовые странички ASP.NET
- 2008 year: Формирование Excel-отчетов
- 2007 year: Типовые ASP.NET2 формы
- 2007 year: Изготовление отчетов в ASP.NET2
- 2006 year: Выражения привязки контролов к данным в ASP2
- 2005 year: SQL-зависимости кеша
- 2005 year: Аутентификация, авторизация (+имперсонализация), персонализация в ASP2
5. Отримання даних за допомогою TableAdapter and SqlDataAdapter, Typed and Untyped DataSet
Інколи я використовую цей засіб роботи з даними. Починалося це все з NET 1.1 e 2002-році ADO .NET, ADO .NET. Потім я написав багато програм з використанням цього засобу роботи з даними, у мене збереглося декілька описів тих старих програм і навіть у мене є описи Extension-функцій до цього фреймфорку:
- 2013 year: How to reorder DataRow with Extension function, anonymous types, Lambda Expression and Linq Special Row Comparer (eng).
- 2012 year: Змінні Nullable та як обробляти DBNull з бази за допомогою Extension-функції
- 2006 year: Бизнес-объекты на базе типизированных спецколлекций
- 2005 year: ProjectExplorer
- 2005 year: Типизируемый тип столбца в GridView
- 2005 year: Классические Business Logic Layer
- 2005 year: DumpExe - утилитка дампирования структуры NET-сборок с открытым исходным текстом.
- 2004 year:- Мое первое знакомство с ASP2 и VS2005
Я і зараз активно використовую цю технологію у десктопних програмах. Також ця технологія активно використовується у деяких інших випадках, наприклад у DataTable імпортуються Excel-файли.
- 2017 year: Cайтік з web-сервісом, специфічнім membership-провайдером та даними Excel.
- 2015 year: SiteRequestTracer - Система аналізу і трасування усіх реквестів до сайту.
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, наприклад
- 2018 year: Proxy-handler for graphhopper.com.
- 2015 year: Моя CMS для ASP.NET MVC.
- 2015 year: DropdownList AutoPostBack у ASP.NET MVC.
- 2015 year: Аналіз MVC-сайту за допомогою System.Reflection.
- 2015 year: Сховище графіки на SQL FileStream та канал браузеру multipart/form-data.
- 2015 year: Формування безопасного токена для зміни паролю.
- 2015 year: Bla-Bla-Car Server.
- 2015 year: Періодична публікація дилерського прайсу.
- 2014 year: My web scrapper with asynchronous web request and visual proxy availability detection (eng).
- 2014 year: Проекты нового Вотпуска.
- 2014 year: Сайт с Google-maps API, имперсонализацией и Dynamic LINQ Expression.
- 2014 year: Типовий SOAP/WSDL сервіс.
- 2013 year: Manage site with huge number of page (content, accounting, testing)
- 2013 year:- B2B-Сервисы с криптографическим залогиниванием (для клиентской и серверной интеграции).
- 2013 year: CMS сайта продажи авиабилетов.
- 2013 year: Сайт поиска работы (HTML5).
- 2012 year: Долгоиграющие странички с прогресс-баром.
- 2011 year: Заполнение связанных списков на MS AJAX и jQuery.
- 2011 year: Как сделать простейший Web-handler - формирующий XML или JSON.
- 2011 year: Курс валют на сайте
Я маю також декілька власних поширень Linq-to-SQL, подивиться будь ласка ось цю сторінку 2013 року - Five amazing Linq-to-SQL extension на англійській мові, та Мої поширення Linq-to-SQL на українській мові. Та ось цю сторінку від 2017-го року Amazing extension function CopyLinqDataMembersByName to expand Linq-to-SQL на англійській мові.
Цікаво, що я спочатку не дуже добре сприймав цю технологію, зараз я лише дивуюсь своєму критичному погляду від 2010-го року.
- 2011 year: Пример использования LINQ-to-XML (XLINQ) и LINQ-to-SQL.
- 2010 year: Извлекаем пользу из LINQ
7. Отримання даних за допомогою ORM Entity Framework
Якщо спробувати сказати щось глобальне про цей фреймворк, то він дозволяє робити те ж саме, що й Linq-to-SQL, але з трьома головними додатками:
Наразі я маю повний опис усіх можливостей Entity Framework на своєму сайті, а також декілька моїх власних описів лише декілька окремих топіків.
- 2015 year: FinancialBroker - MDI application with EF code first database.
- 2016 year: Умови використання Entity Framework.
- 2016 year: Декілька моїх останніх тестових проєктів.
- 2016 year: Застосування патерну Dependency Injection за допомогою IoC-контейнера Ninject.
- 2017 year: My project for refactoring huge database to prepare using it in Entity Framework
- 2017 year: My project for Nairobi, Kenya (ASP.NET Classic, VB.NET, NET 4.5, Bootstrap, Entity Framework)
- 2017 year: My teaching australian's programmer (MariaDB, ADO NET & Entity Framework, ASP.NET Classic, VB.NET)
- 2017 year: Entity Framework missing FAQ (Part 1). (укр)
- 2017 year: Entity Framework missing FAQ (Part 2). (укр)
- 2018 year: Entity Framework missing FAQ (Part 3). (укр)
- 2018 year: Entity Framework missing FAQ (Part 4).
- 2018 year: Project for refactoring ODBC access to MySQL up to EF6 Code First with MySQL.
- 2018 year: How to use SQLite with EF6. (engl)
- 2018 year: Template to save SQLiteDB (EF6) to Temporary Location. (engl)
- 2019 year: Generic VB.NET function for loading ExcelFile to DataBase (EF6 CodeFirst) with Reflection and avoiding Linq-to-Entity Linq.Expressions (use Linq-to-Object IEnumerable)
- 2019 year: VB.NET compiler restrictions.
- 2019 year: Transform Database from MsSQL to MySQL (Net Core EF DbFirst, Scaffold-DbContext, Read Db Schema, Move Users and data, EF SQL trace).
- 2022 year: CheckDBNull and RawSqlQuery - two amazing extension for working with data.
|