2011-06-28 8 views
1

Как я был первоначально преподавал структурировать 3-уровневой выглядит следующим образом:Где разместить Reader/Writer/Emailer ... * er классы в этой структуре пакета?

  • дао
  • домен
  • услуги
  • Utils
  • JSF (бобы) ...

Класс A * er, который является instantiatable, не подходит ни одному из этих пакетов, особенно utils, где классы будут y групповые статические методы. Это может быть добавлено к сервисам как побочным, но это неудобно.

С тех пор я видел более сложную структуру пакета (возможно, заимствованных из Maven):

  • постоянной (harcoded констант и перечислений)
  • дао
  • dao.impl (реализации интерфейсов)
  • модели
  • ресурсы (для имущества и конфигурационных файлов)
  • сервис
  • service.impl
  • щ ...

Однако я до сих пор не вижу, где можно было бы разместить класс * эр, и теперь я вижу другие типы классов выскакивают как пользовательские исключения, и это оригинальный шаблон для весны (см. ниже). В общем, кажется, что это типы классов, которые вы обычно находите в рамках/API.

import org.springframework.context.ApplicationContext; 

public class AppContext { 

    private static ApplicationContext ctx; 

    /** 
    * Injected from the class "ApplicationContextProvider" which is automatically 
    * loaded during Spring-Initialization. 
    */ 
    public static void setApplicationContext(ApplicationContext applicationContext) { 
     ctx = applicationContext; 
    } 

    /** 
    * Get access to the Spring ApplicationContext from everywhere in your Application. 
    * 
    * @return 
    */ 
    public static ApplicationContext getApplicationContext() { 
     return ctx; 
    } 
} 

import org.springframework.beans.BeansException; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.ApplicationContextAware; 

public class ApplicationContextProvider implements ApplicationContextAware { 

    public void setApplicationContext(ApplicationContext ctx) throws BeansException { 
     // Wiring the ApplicationContext into a static method 
     AppContext.setApplicationContext(ctx); 
    } 
} 

Как бы сгруппировать эти или любые другие "unclassifiables"?

ответ

1

Это зависит от того, что делают классы чтения/записи и электронной почты.

Предполагая, что класс Emailer посылает по электронной почте, даже thoguh это инстанциируемый класс, будет вписываться в пакете по UTIL или помощник, так как он не тесно связан с логикой приложения.

Для исключений я видел подход, когда они помещали классы исключений в отдельный пакет * .exceptions рядом с пакетом, в котором он используется, или внутри пакета, где он используется.

.: например

application.dao 
application.dao.impl 
application.dao.exceptions 
+0

Мне нравится идея хелперов пакета. Наличие субпакетов в зависимости от того, как используется класс, также кажется разумным. Спасибо, я приму этот подход :) –