У меня есть webapp с JSF, Spring и Mybatis. Эти структуры используются в контрольных, бизнес-и дао-слоях соответственно. В моем слое DAO у меня есть методы для операций CRUD. Теперь, в моем слое контроллера, мне нужно использовать операцию вставки. Для этого я мог бы использовать эту конфигурацию:Может ли слой контроллера вызвать прямо на слой Persistence?
Controller Layer
Я использую JSF с аннотациями
@ManagedBean
public class Controller{
@ManagedProperty("#{business}")
private Business business;
public void insert(){
business.insert();
}
}
Бизнес Layer
я использую Spring с аннотациями
public interface Business{
public void insert();
}
@Service("business")
public class BusinessImpl implements Business{
@Autowired
private DaoMapper mapper;
@Override
@Transactional
public void insert(){
mapper.insert();
}
}
DAO слой
Я использую Mybatis (mybatis-весна библиотека)
public interface DaoMapper{
public void insert();
}
Но как в этом случае мой бизнес слой только позвонить в DAO слой и не понимают любой другой операции, Я думаю, чтобы использовать эту конфигурацию:
Controller Layer
@ManagedBean
public class Controller{
@ManagedProperty("#{daoMapper}")
private DaoMapper mapper;
public void insert(){
mapper.insert();
}
}
DAO слой
public interface DaoMapper{
@Transactional
public void insert();
}
Я уже протестирована и работает нормально, но я хотел бы знать, если я подвергаясь плохая практика
[EDIT]
На самом деле DaoMapper interface - это Mapper класса MyBatis, который связан с XML-файлом (Look). Я не знаю, делает ли это класс DAO. Я думаю, что я должен на самом деле назвать это Persisence Layer или Mapper Layer
Источник: http://www.infoq.com/articles/ddd-in-practice
Как вы можете видеть. Презентационный слой. В моем случае Контрольный уровень (я думаю, что я сделал еще одно именование ошибки), вызывается непосредственно в DTO (или это то, что я понимаю).
Если на моем контроллере или уровне презентации (как бы вы это ни называли) мне нужна вставка или операцию обновления, я мог бы ссылаться непосредственно из класса сопоставления, или мне обязательно нужно создать бизнес-класс только для этого класса, чтобы вызвать класс сопоставления
Теперь. Если возможно использовать эту конфигурацию, у меня есть сомнения:
Предположим, что в методе моего бизнес-класса мне нужно вызвать операцию вставки.Это было бы как:
@Service("business")
public class BusinessImpl implements Business{
@Autowired
private DaoMapper mapper;
@Override
@Transactional
public void insert(){
mapper.insert();
}
}
Но метод вставки из интерфейса DaoMapper уже @Transactional аннотацию. Метод Вставка будет дважды затронута @Transactional аннотация. Разве это не проблема?
Если вам не нужны услуги - не используйте их вообще. Но если вы решите использовать их и сможете дифференцировать программу позже, хотя на данный момент у них будут только вызовы DAO, придерживайтесь всегда их использования, а не DAO. Мой совет: не смешивайте и не следуйте выбранному соглашению! – skuntsel
Другими словами, если в другом классе контроллера вызовет бизнес-уровень, связываясь с базой данных. Я всегда буду иметь дело с бизнес-слоем, хотя мой бизнес-уровень ** только ** называет упорство (мы согласились, что было бы лучше назвать его), и не выполнял другую работу. Как глупый слой. Не влияет ли это на приложение? –
Это все? Можете ли вы дать мне больше возможностей? –