サービス層が本当に必要な場合は、私は考えています。Java Swingアプリケーションのサービス層
私はデスクトップスイングアプリケーションにspring + hibernateを使用しています。この時点で私はgui/swing層 - > service層 - > dao層を持っています。私は@トランザクションサポートとIOC注射のためだけにスプリングを使用します。
ベストプラクティスでは、私のdaosを使用するサービスを作成し、すべてのトランザクション管理をサービスに入れなければならないと言います。
しかし、私は非常に非常に多くの場合、サービス層はだけなので、たとえば、DAOのメソッドを複製することを実現しています:
// a DAO example
@Repository
public class CustomerHibernateDAO extends BaseHibernateDAO implements CustomerDAO {
public List<Customer> findAllCustomerILikeName(String name){
return getSession()
.createCriteria(Customer.class)
.add(Restriction.ilike("name", name))
.list();
}
}
// Customer service to use this dao...
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerDAO customerDAO;
// Why i can't call DAO instead the service?
public List<Customer> getAllCustomersByName(String name){
return customerDAO.findAllCustomerILikeName(name);
}
}
これは、サービス層の鉱山tipical使い方です... HibernateはDBに依存しないで、春は専門学には無関係です:私は本当にそれが必要ですか?
すべてのDAOを管理するユニークなサービスクラスについて教えてください。私はこれが良い妥協であるかもしれないと思うか、または悪い習慣ですか?
私は悪い方法でDAOに@Transactionalを置くが、この時点で私はそれだけプット@Transactionalのためのサービスを記述する必要があります...私について
EDIT
詳細に関する情報を知っていますアプリ。
私のアプリケーションは管理ソフトウェアであり、ユーザー登録、製品、注文などを管理します。 実際には、多くの読み込みエンティティ - >編集 - >保存エンティティまたは作成 - >編集 - >保存操作が含まれており、休止状態のおかげで、これらの操作はほとんどの場合、@manyto ... collectionおよびcascade.save_updateは、同じ持続操作で2つ以上のエンティティを保存することを許可します。
ので、例えば、私の項目にJFrameの私は、インサート編集または(販売する製品)項目を作成することができる場所があります。
public ItemFrame(){
// the constructor
itemService=springAppContext.getBeans(ItemService.class);
}
public boolean validateForm(){
// test if the gui is correctly filled by user
}
public boolean save(){
// create an Item entity taking value from swing gui(JTextField etc)
Item item=new Item();
item.setName(nameTextField.getText());
item.setEtc...
// ItemService ' save method is a wrap around itemDao.save(item)...
itemService.save(item);
}
private void saveItemActionPerformed(ActionEvent evt){
// When i press SAVE button
if(validateForm()){
save();
}
}
これは私がほとんどの場合持っているもので、だから私は貧血ドメインの反パターンに落ちたと思う...
ありがとう。
に使用する後者を可能考えるcorrectly.Services entity.Itウィルあたりにあるはずです私は標準的なパターンを維持する+もしあなたがDAO層を構築しているだけで、DBに変更が来たら、+ 1 btw –
DBの変更が来たら、私はサービスを使用しなかった。私はDAOを再構築するだけです。 – blow
ここで少し話題になっていますが、ItemFrameコンストラクタのコンテナからBeanを取得する理由は何ですか?コンテナによって注入されたBeanを取得することよりも、このアプローチの利点はありません。 – prasopes