Вот несколько мыслей о дизайне модели из моего опыта.
- Расслабьтесь. Независимо от того, что вы делаете в дизайне вашей модели, она все равно может быть открыта для критикии жалобы от людей.Вы не можете угодить всем.Если вы сделаете это полностью модным словом, совместимым с последним мышлением вещей, оно может быть сложным, абстрактным или трудным для понимания.С другой стороны, если вы просто соберете это без особой рифмы или причины, вы тоже можете попасть в неприятности.Код предназначен для обслуживания приложения, он предназначен для того, чтобы приложение попадало в готовую корзину таким образом, чтобы его было легко прочитать, легко понять, легко обслуживать.Многие другие соображения второстепенны.
- Какой уровень воздействия делать .Правильный ответ зависит от того, каково будущее вашего приложения, и любой подход может быть хорошим решением.Что-то, что помогает мне решить, что делать с моделями, это притвориться, что я пишу более одного слоя потребителя / пользователя / пользовательского интерфейса, который идет поверх моделей.Поэтому обычно приложение имеет только один пользовательский интерфейс.Но представьте, что в приложении будет более одного пользовательского интерфейса - скажем, как веб-интерфейс, так и настоящий графический интерфейс смартфона.Делая вид, что будет и то, и другое, вы сможете принимать решения о том, чтобы все больше и больше логики добавлялось к уровню моделей / доступа к данным, и все меньше и меньше логики - на уровне пользовательского интерфейса.Если вы сделаете свои модели очень тонкими и выставите аспекты ORM в пользовательский интерфейс, то у вас возникнет соблазн вставить в интерфейс достаточное количество кода типа ORM.Это может привести к тому, что код станет более шизофреничным.Это делает его таким, что если вы когда-нибудь решите изменить бэкенды, скажем, с SQL на другой вариант SQL, или Cassandra, или что-то еще, вы в значительной степени не сможете этого сделать.ваш доступ к данным. Вы можете поместить весь свой доступ к данным в веб-сервис.Тогда ваш уровень пользовательского интерфейса будет использовать веб-сервис для доступа ко всем данным, как для чтения, так и для записи.Это звучит немного радикально, но имеет ряд ключевых преимуществ.
- Он помогает разделить проблемы уровня пользовательского интерфейса и уровня бизнес-логики.
- Позволяет добавлять дополнительные типы пользовательских интерфейсов позже при сравнительно небольших усилиях.Вы можете встроить инструменты в свою платформу (если они еще не существуют), что делает это очень легким, и вы можете обнаружить, что ваш код становится меньше.
- Это делает его более сравнительно простым, чтобы полностью изменить то, как ваш бэкэндработает без изменения какого-либо кода вашего пользовательского интерфейса.
Таким образом я переместил приложение из SQL в Cassandra.Разделяя весь доступ к данным в веб-сервис, реализуя хороший набор тестов для веб-сервиса, затем повторно внедряя веб-сервис.После этого приложение стало намного меньше и чище.
Я думаю, вы беспокоитесь о неправильных вещах.Представьте, что уровень / модели доступа к данным предоставляют идеальные услуги, которые сделают ваши пользовательские интерфейсы максимально простыми для реализации.Представьте, как будет выглядеть этот идеальный слой доступа к данным, чтобы сделать работу проще.Остановите этот интерфейс, а затем воплотите его в жизнь.Как это выглядит изнутри, менее важно.
Важно то, что приложение должно быть завершено, оно должно работать, и оно должно быть читабельным и простым в обслуживании.Лично я бы не потел все остальное.Если ключевым требованием вашего приложения является то, что оно производит впечатление на человека, если смотреть изнутри, вы беспокоитесь о неправильных вещах.Прочитайте, что другие люди говорят, и используйте то, что резонирует в вас и имеет смысл, но не переживайте, если то, что вы читаете, не кажется вам полезным в ваших проектах.