Подтвердить что ты не робот

Что не так с двусторонним отображением?

Я использую AutoMapper уже несколько месяцев с успехом, но теперь я ударил немного камнем преткновения. То, что мне нужно (или думаю, что мне нужно), предназначено для двухстороннего сопоставления. Это происходит, когда я загружаю элемент из базы данных для воспроизведения на экране (объект домена → модель просмотра) и когда пользователи вносят изменения в указанный элемент и перенаправляют его обратно на мой объект домена (модель просмотра → объект домена).

Я понимаю, что я мог бы просто создать сопоставление в моем профиле для обработки двухстороннего сопоставления, но я читал здесь, что двустороннее сопоставление не нужно. Многие люди указывают на то, что это ответ на то, чтобы не исправлять большую проблему (что бы это ни было).

Мне просто интересно, почему это запах кода?

4b9b3361

Ответ 1

Когда я был младшим разработчиком, я работал над большим проектом, который в основном делал то, что вы описываете. Мы не использовали automapper, но мы создали viewmodels, которые инкапсулировали объекты домена, которые в основном означали, что вы внесли свои изменения из представления непосредственно в объекты домена. Просто сохраняйте свои изменения и престо, где они хотят, чтобы они были (в базе данных). Это приложение должно было выйти четыре года назад, но они все еще борются.

Почему это запах? Ну, вы теряете следы каких-либо намерений относительно того, почему вы меняете вещи. И намерение - это то, что действительно важно, поскольку ваше приложение растет и становится более сложным. Его сложно обеспечить применение новых правил в вашем домене, потому что трудно точно определить, какие операции действительны для вашего домена. Если вы сделаете свою модель автодоменки домена, ее также очень anemic.

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

Я думаю, что большая проблема заключается в том, что модель домена, которая может быть автоматически удалена из режимов просмотра, не передает намерения и инкапсуляции удовлетворительным образом. Если вы создаете небольшое приложение, тогда активная архитектура стиля записи/набора данных может быть не плохой, но если решение крупнее масштабированного или сложного, у вас больше проблем, чем сопоставление из viewmodel в домен.

В текущем приложении, над которым я работаю, мы используем automapper для отображения из домена в dto и из dto в viewmodels. Когда что-то нужно сохранить, мы переводим операцию с режимами просмотра в явные команды, выполняемые против домена. Я бы никогда не рекомендовал трехуровневую архитектуру в любом крупномасштабном приложении (тонкий или толстый клиент).