Что лучше: создавать классы моделей или придерживаться универсального служебного класса базы данных?

У нас есть простой служебный класс для наших вызовов базы данных (легкая оболочка вокруг ADO.NET), но я думаю о создании классов для каждой базы данных / объекта. Будет ли это разумным поступком или будет только полезно, если мы будем использовать полную структуру MVC для ASP.NET?

Итак, у нас есть это:

SQLWrapper.GetRecordset(connstr-alias, sql-statement, parameters);
SQLWrapper.GetDataset(connstr-alias, sql-statement, parameters);
SQLWrapper.Execute(connstr-alias, sql-statement, parameters);

Думаю об этом:

Person p = Person.get(id);
p.fname = "jon";
p.lname = "smith";
p.Save();

или для нового рекорда -

Person p = new Person();
p.fname = "Jon";
p.lname = "Smith";
p.Save();
p.Delete();

Было бы это умно или было бы чересчур? Я вижу преимущества повторного использования, изменения базы данных и обслуживания / удобочитаемости.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
838
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

MVC никоим образом не является единственным шаблоном проектирования для Интернета, но он полезен.

На мой взгляд, использование только буквы «М» принесет дивиденды, даже если вы не сможете / не сможете принять букву «V» или «C».

Спасибо за вклад, думаю, я начну добавлять / заменять букву «М», как вы ее выразили! (ранее отвечал как ответ, который был удален согласно правилам сообщества)

Steve Tranby 05.09.2015 03:24
Ответ принят как подходящий

Это загруженный вопрос: дизайн, управляемый данными, или дизайн, управляемый предметной областью. Для любого приложения с хорошим поведением предпочтение следует отдавать дизайну, основанному на предметной области. Отчеты или служебные приложения, как правило, лучше работают (или быстрее развиваются) с дизайном, основанным на данных.

Вы спрашиваете: «Должна ли моя компания кардинально изменить то, как мы разрабатываем наш код». Как помешанный на домене, моя внутренняя реакция - крикнуть да. Однако, судя по простоте вашего вопроса, я не уверен, что вы полностью понимаете масштаб предлагаемого вами изменения. Я думаю, тебе стоит поговорить об этом со своей командой.

Возьмите литературу, например книгу DDD Эвана или бесплатная электронная книга по фондам, и тогда вы сможете лучше понять, в каком направлении вам следует двигаться.

Спасибо за информацию, я изучу эти книги. Извините, мой вопрос был загружен / простой. Я не хотел писать слишком много, и, наверное, стоило просто спросить о модели и отсутствии модели. Проблема с моей командой заключается в том, что я здесь новичок, и они запускают много-много устаревшего очень sphagetti Classic-ASP кода, плюс они все еще развиваются таким образом, используя некоторые функции ASP.Net. (ранее ответил на это как ответ, который был удален в соответствии с правилами сообщества)

Steve Tranby 05.09.2015 03:24

Мне кажется, что вы пытаетесь сделать то, что LINQ уже может сделать для вас. Если вы застряли в более старой структуре, в которой вы не можете это использовать, я могу предложить вам использовать Subconic (http://subsonicproject.com/) вместо того, чтобы вручную создавать все эти объекты модели вручную.

У меня был проект, в котором я попал в аналогичное затруднительное положение и на полпути перешел на дозвуковой режим с фантастическими результатами. Более быстрая разработка и НАМНОГО легче читать / использовать код.

Я тестирую Linq to SQL, когда пишу это, и это здорово. Похоже, это для простого отображения, но этого должно хватить для всего, что мне нужно. Определенно то, что нужно сгенерировать.

Steve Tranby 02.10.2008 20:28

Обсуждаемый вами подход многими, в том числе и мной, считается хорошим! Изучение этого подхода потребует некоторых усилий, но пусть это вас не отпугнет!

А как насчет того, чтобы просто попробовать небольшой проект с LINQ to SQL? Возможно, найдите хороший справочный проект на код Google и изучите, как другие работали с ним.

Это простой инструмент, который позволит вам ознакомиться с некоторыми проблемами, возникающими при сопоставлении объектов с базами данных.

Затем вы сможете почувствовать это и решить, стоит ли это обучения.

Будут новые концепции, которые нужно понять и экспериментируйте с такими вещами, как:

  • Единица работы: Когда вы выполняете «Сохранить» и «Удалить» и т. д., ORM, как правило, не делает это немедленно, тогда как DAL, основанный на наборе записей, будет. Это может быть удивительно, поэтому вам нужно немного узнать об этом. Прочтите Шаблон единицы работы, чтобы понять это.
  • Массовые операции - проблема с OR / M. Средство чтения данных может эффективно перебирать тысячи строк, но с ORM нужно быть осторожным при работе с большими пакетами объектов. Опять же, нужно читать.
  • Ассоциации кажется отличным, когда можно делать такие вещи, как customer.Orders.Count, но они также являются причиной многих проблем. Вам нужно будет найти некоторые безопасные методы работы с ассоциациями.

...назвать несколько.

Для начала не беспокойтесь о наследовании и прочем, просто начните с простого и создайте простые сущности, которые сопоставляются с таблицами.

Попробуйте использовать их так же, как и ваш существующий DAL. Затем начните экспериментировать с ассоциациями.

Тогда, возможно, попробуйте придать своим сущностям больше поведения. Если вам это начинает нравиться и вы чувствуете, что вам нужно больше функций, подумайте о том, чтобы попробовать более многофункциональный ORM, такой как Скорость света или NHibernate.

Надеюсь это поможет!

Другие вопросы по теме