Где Comparator живет в доменном мире MVC? - PullRequest
1 голос
/ 11 августа 2011

У меня есть класс, который нужно сортировать несколькими способами, многие из которых нарушают контракт equals(), поэтому мне нужно иметь кучу разных классов Comparator.У меня есть вопрос, где эти классы должны жить?

Чтобы можно было использовать что-то конкретное в качестве примера структуры пространства имен и ограничить вопрос структурой пакета, а не структурой файла, давайте предположим следующие пространства имен:

app
  domain
    exception
    hibernatemapping
  mvc
    propertyeditor
    tags
  persistence
    hibernate

Классы доменов находятся в пространстве имен domain, а связанные файлы исключений и отображения гибернации - в exception и hibernatemapping соответственно.persistence содержит интерфейсы DAO с реализациями на основе гибернации в hibernate.Все контроллеры MVC живут в mvc, со специализированными редакторами свойств (это Spring MVC) в propertyeditor и классами, которые поддерживают пользовательские теги в tags.

Мой инстинкт говорит, что Comparators должножить в пространстве имен domain, возможно, в domain.comparator, но я не уверен.

Где бы вы их разместили и почему?


Обновление: Количество людейпредложили использовать общий пакет Util.Идя по этому пути, вы бы отделили классы Util от помощников пользовательского интерфейса от помощников домена?Например, если домен должен был сортировать вещи по причинам бизнес-логики, но для пользовательского интерфейса нужны дополнительные сортировки, которые не заботятся о домене?По сути, вы бы хотели иметь вспомогательный пакет для каждого слоя?

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Как и предполагалось, что-то вроде пакета util или commons может показаться наиболее целесообразным, но убедитесь, что вы не используете его как пакет "goto", если не знаете, куда что-то поместить.

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

0 голосов
/ 11 августа 2011

Я сделал пакет под названием comparators, в котором я храню свой.

0 голосов
/ 11 августа 2011

Я предлагаю создать пакет с именем "app.util" или "app.helper".

Концептуально, в доменно-управляемом дизайне это относится к уровню инфраструктуры (http://www.infoq.com/articles/ddd-in-practice).

0 голосов
/ 11 августа 2011

Обычно я использую следующую структуру:

company
  appname
     model
     util
     dao
     service
     controller

В структуре такого типа компаратор, вероятно, будет выгружен в пакет утилит (если бы на самом деле было много компараторов).

Однако обычно я нахожу, что компараторы используются ровно в одном месте, и поэтому я объявляю их встроенными там, где они фактически используются, например,

public class SomeService {
    public void someMethod(String id) {
        List<ListType> list = dao.getSomeListById(id);
        Collections.sort(list, new Comparator<ListType>() {
            public compare(ListType a, ListType b) {
            // ...
            }
        });
    }
}
...