Вопрос

Я расширяю / преобразование устаревшего веб-форм формы в полностью новое приложение MVC. Расширение - оба с точки зрения технологии, так и деловой случай. Наследие приложение - это хорошо сделанная база данных, управляемый базой данных (DBDD). Так для е.Г. Если у вас есть разные типы сотрудников, таких как оператор, супервизор, хранитель магазина и т. Д., И вам нужно добавить новый тип, вы просто идете и добавляете несколько строк в пару столов и Voila, ваш интерфейс автоматически имеет все, чтобы добавить / обновить новое Тип сотрудника. Однако отделение слоев не так хороша.

Новый проект имеет два основных целя

    .
  • Расширяемость (для текущих и будущих требований трубопровода)
  • производительность

    Я намерен создать новый проект, заменяющий Data Design Design (DBDD) с доменом Design (DDD), сохраняя в виду требование расширяемости. Однако перемещение от базы данных, ориентированного на проектирование доменную конструкцию, по-видимому, обратно повлияет на требование к производительности, если сравнивать его с производительностью устаревшего приложения DBDD. В устаревших приложении любой вызов для данных из UI напрямую взаимодействует с базой данных, и любые данные будут возвращены в форме данных DataReader или (в некоторых случаях) набор данных.

    Теперь со строгим DDD на месте любой вызов для данных будет направлен через бизнес-уровень и слой доступа к данным. Это будет означать, что каждый вызов будет инициализировать бизнес-объект и объект доступа к данным. Одной пользовательской интерфейсии UI может понадобиться разные типы данных, и это является веб-приложением, каждая страница может быть запрошена несколькими пользователями. Также веб-приложение MVC является нестандартным, каждый запрос понадобится инициализации объектов бизнес-объектов и объектов доступа к данным каждый раз. Таким образом, кажется, что приложение MVC без приложения, DBDD предпочтительнее для DDD для производительности.

    Или есть путь в DDD для достижения обоих, расширяемость, которую содержит DDD, а также производительность, которые обеспечивает DBDD?

Это было полезно?

Решение

Вы считаете, что вы считаете некоторую форму разделения запросов команды, где обновления проходят через модель домена, но читает, поставляются в качестве данных DataReader?Полный взорванный DDD не всегда подходит.

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

«Теперь со строгим DDD на месте любой вызов для данных будет направлен через бизнес-уровень и слой доступа к данным».

Я не верю, что это правда, и это, безусловно, не практично. Я считаю, что это должно прочитать:

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

Нет ничего, что говорит, что вы не можете позвонить на уровень доступа к данным непосредственно, чтобы получить любые данные, которые вам нужно отобразить на экране. Только когда вам нужно внести изменения в данные, которые вам нужно вызовить свою модель домена, которая разработана на основе его поведения. На мой взгляд, это ключевое различие. Если вы направляетесь всем через свою модель домена, у вас будут три проблемы:

  1. Время - это займет у вас намного дольше для реализации функциональности, без пользы.
  2. модель дизайна - ваша модель домена будет согнуты из формы, чтобы удовлетворить потребности, а не по поведению.
  3. performance - не из-за дополнительного слоя, но потому что вы не сможете получить агрегированные данные из вашей модели так же быстро, как вы можете напрямую из запроса. I.E. Рассмотрим общую стоимость всех заказов, предназначенных для конкретного клиента - намного быстрее написать запрос для этого, чем для получения всех объектов заказа для клиента, итерации и суммы.

    Как упоминалось Chriseyre2000, CQRS направлен на решение этих точных проблем.

Использование DDD не должно иметь значительных последствий производительности в вашем сценарии.Что вы беспокоитесь о том, кажется, больше похоже на проблему доступа к данным.Вы относитесь к этому как

Инициализируйте бизнес-объект и объект доступа к данным

Почему «инициализация» дорого?Какие механизмы доступа к данным вы используете?

DDD с длинными живущими объектами, хранящимися в реляционной базе данных, обычно реализуются с ORM. если используется правильно , ORM будет очень мало, если таковые имеются, влияют на производительность для большинства приложений.И вы всегда можете вернуть самые чувствительные к производительности частей приложения для RAW SQL, если есть проверенное узкое место.

Для того, что это стоит, Nibernate требуется только после начала приложения, после чего он использует пул ADO.NET Connection в качестве обычных считывателей данных.Таким образом, все это сводится к правильному отображению, полученной стратегии и избежать классических ошибок доступа к данным, таких как «N + 1 Selects».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top