7

Я думаю о наилучшем подходе к отдельному представлению модели и контроллеру для Java и использованию Eclipse, если это имеет значение.Лучший подход к отдельной модели, виду и контроллеру

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

  • com.company.client (контроллер)
  • ком. company.client.model
  • com.company.client.view

  • com.company.another (контроллер)

  • com.compa ny.another.model
  • com.company.another.view

  • com.company.yetAnother (контроллер)

  • com.company.yetAnother.model
  • com.company.yetAnother.view

(предположим, много различных пакетов, каждый со своей собственной точки зрения и модели)

Я думал об использовании:

  • com.company.client
  • com.company.another
  • com.company.yetAnother

  • com.company.model.client

  • com.company.model. другое
  • com.pany.model.yetАнтернет

  • com.company.view.client

  • com.company.view.another
  • com.company.view.yetAnother

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

Итак, каков наилучший подход для разделения M, V и C?

(рассмотрим веб-приложений и настольных, а не только веб)

+0

Межсайтовый дубликат: [Я должен организовать свои папки по бизнес-домену или по техническому домену?] (Http://programmers.stackexchange.com/q/170348/165156) – emlai

ответ

4

The Graal Quest! Вы двумерный матрица с вертикальными (MVC) и горизонтальных (бизнес-правила) слоями ...

  • Я не нашел строгий ответ
  • Вашего первого подход выглядит хорошо потому, что модульная ориентированные (непреднамеренный возможно)
  • для небольшого приложения ваш второй, хотя, может быть приемлемым

для меня ответ слово: зависимости
Продолжайте поиск в «дизайне/стратегии упаковки»; "Зернистости"

Некоторое чтение

Я сильно Recommand это одно:

УДАЧА!

1

Вы обеспокоены тем, только с «разделения» Модель, Вид и контроллер, насколько наименования и пакеты идут? Кажется, это все, о чем вы просите.

Я склонен раскладывать свои пакеты, например:

  • com.company.app.domain - классы модели домена для приложения, просто Java Beans (добытчиками и сеттеров только, очень мало, если какой-либо логики). Это используется как «модель» во всем приложении и используется каждым слоем моего приложения.
  • com.company.app.service - Классы уровня обслуживания приложения, содержащие бизнес-логику.
  • com.company.app.web.controllers - Контрольные классы для моего webapp. Другие классы, специфичные для Интернета, помещаются в другие подпакеты web.
  • com.company.app.dao - DAO интерфейсы для доступа к классам модели домена - то есть для извлечения пользователя из базы данных и т.д.

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

+0

Я обновил вопрос с просьбой рассмотреть либо настольных приложений. Кстати, где точка зрения? В web.view pkg? –

+0

В веб-проекте «представление» обычно является шаблоном, а не фрагментом кода, оно хранится в папке ресурсов (вне дерева кода). –

1

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

Большинство приложений, над которыми я работаю, следуют следующей структуре упаковки: * .domain, * .service.subservice, * .dao, * .web.controllers. Это хорошо работает для отслеживания циклических зависимостей в базе кода и/или зависимостях, которые поступают неверно (контроллер попадает на dao без косвенности службы). Он также обеспечивает очень простую упаковочную структуру, которая полезна и не обременительна.

Однако это происходит при рассмотрении автоматических оценок воздействия зависимостей. В настоящее время я использую DependencyFinder с небольшим количеством настраиваемого кода для сравнения двух файлов jar перед QA. DependencyFinder вытащит все модифицированные методы и связанные с ними зависимости первого уровня. Пользовательский код должен использовать для отображения модифицированных методов/классов в бизнес-функции и выплескивает файл грамматики graphviz для рендеринга набора изменений на основе бизнес-функции, графика зависимости для QA. В настоящее время мы пытаемся использовать результаты инструмента для планирования интеллектуального регрессионного тестирования, особенно для производственных дефектов, которые переходят к производству без полного многонедельного регрессионного теста.

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

+0

Я не знаю, хорошо ли я вас понимаю, но то, что я ищу, - это модульность и простота, чтобы система развивалась, не становясь монстром. И изменения добавляются без особого воздействия или многого необходимо понимать из новый разработчик. –

1

Вот пример использования Многоуровневая архитектура с тремя слоями (приложений, домен, пользовательский интерфейс):

в Model-View-Controller (MVC) модель будет в нижнем слое, например, как com.company.myapp.domain. Все остальные слои могут получить доступ к Модели. Затем View и Controller будут в com.company.myapp.ui. Это означает, что класс Controller всегда находится на том же уровне, что и View. Не путайте MVC-контроллер с другими классами контроллеров, которые обеспечивают логику приложения и находятся в прикладном уровне. Например, SalesController в com.company.myapp.application, который предоставляет системные операции для обработки продаж.

Теперь вы можете представить, что SalesController изменяет некоторые данные в вашей модели (обновляет продажу), а затем модель информирует MVC-контроллер, который обновляет представление.

Примечание: Все модели находятся в слое domain. Все представления и контроллеры MVC находятся на уровне ui. Контроллеры бизнес-логики находятся в слое application. Разумеется, вы можете разделить эти три слоя дальше, если у вас много классов с различными проблемами.

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

3

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

  • имена
  • модульность

Для наименования я стараюсь иметь наивысшее сцепление в каждом пространстве имен и следить за Common Closure Principle и Common Reuse Principle.

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

MVC - это шаблон модуля представления, который направлен на то, чтобы определить, как модуль представления управляет потоком, на каких моделях данных он основан и который является логикой, связанной с представлением.

В моей java-среде IDE (например, Eclipse) я использую проект для каждого модуля, поэтому веб-модуль будет проектным и настольным модулями, будет другим проектом.В веб-проекте, например, у меня есть общий префикс, например:

com.mycompany.app.web 

и в нем у меня есть .controllers (или действия) потомка, A .models потомков и так далее.

com.mycompany.app.web.models 
com.mycompany.app.web.actions 

Если я использую базу данных, я полагаюсь на модуль DAO, другой проект. Модуль DAO не имеет презентации, поэтому у него нет подхода MVC. Он сохраняет объекты домена, поэтому, возможно, он полагается на модуль домена. В этих модулях я использую префиксы следующее:

com.mycompany.app.domain 
com.mycompany.app.dao 

Я стараюсь не путать Model в MVC с применением домена; они не одно и то же.

Еще одна распространенная ошибка состоит в том, чтобы запутать контроллер с бизнес-логики; бизнес-логику следует размещать в модуле и совместно использовать через модули представления, контроллер в пространстве имен модуля презентации (веб-сайт или рабочий стол).

Модель (в MVC, вид модели) представляет собой объект, используемый целью показать, что-то для пользователя: она может содержит один, комбинация или набор домена объектов. Контроллер использует доступные модули (DAO и т. Д.) Для построения вида Модель, а затем передает его на номер . Вид.

View затем может полагаться только на его модели (только один, специально созданной контроллер) и попросить модели только к контроллерам (только возможность строить модели). View, особенно для веб-презентаций, часто кодируется в виде сочетания языков, поэтому часть кода может оставаться за пределами соглашений об именах.

+0

+1 для отличного разделения проблем в вашем подходе –

1

Подумайте, как вы развиваетесь. Разрабатываете ли вы каждый контроллер/модель/представление? Или вы разрабатываете для каждого модуля. Скорее всего, вы разрабатываете модуль, а не на уровне MVC. Поэтому я думаю, что есть ответ. Попытайтесь сохранить имена пакетов как можно ближе к модулям, которые представляет ваша система (что вы уже делаете, я полагаю). Не нужно показывать вам архитектурные варианты в именах пакетов.

Отображение имен модулей и проблем домена в вашем пакете создает поддерживаемую и согласованную базу кода.

Смежные вопросы