したがって、データ転送オブジェクトには、セッターとゲッターのみが存在するはずです..しかし、データ転送オブジェクトからのオブジェクトの挿入と削除も処理するのはどうですか?
public class dto{
setters and getters...
..
..
public void delete(){
CustomreDao.delete(this.ID);
}
}
それはDAOパターン自体に反するのでしょうか?
前もって感謝します。
したがって、データ転送オブジェクトには、セッターとゲッターのみが存在するはずです..しかし、データ転送オブジェクトからのオブジェクトの挿入と削除も処理するのはどうですか?
public class dto{
setters and getters...
..
..
public void delete(){
CustomreDao.delete(this.ID);
}
}
それはDAOパターン自体に反するのでしょうか?
前もって感謝します。
これはオブジェクト指向言語の設計原則です。単一責任の原則によれば、すべてのクラスは 1 つの責任のみを持つ必要があります。DTO クラスの責任は、転送目的でデータを格納することです。あなたの例にあるような振る舞いをしてはいけません。
「DAO の delete メソッドを更新するのはどれくらい難しいでしょうか?」と自問してみてください。多くの DTO があり、突然 DAO を変更する必要がある場合、それは自分で作成したばかりの多くの作業です。
DTO を DAO に接続する責任を別の場所に任せて、単一のポイントから相互作用を制御できるようにします。
答えはイエスだと思います - これはDAOのパターンに反しています。
データ アクセス オブジェクト パターンは、オブジェクト ストレージへのアクセスをカプセル化することに関するものです。
Data Transfer Object をまったく使用することさえできません。
あなたが話していること-ビジネスオブジェクト自体にメソッドを持つことは、私が好むActive Recordパターンです。
両方のアプローチを使用することもできます。たとえば、データベースを介したデータ アクセスを実装する方法として CustomerDao を使用しますが、便利なインターフェイスには ActiveRecord を使用します。
customer.save();
anotherCustomer = Customer.find(id);
これらのメソッドは、CustomerDao を内部的に使用できます。
DTOはさまざまな複雑なフレームワークで使用されていると思いますが、使用を避けることができれば、追加のDTOレイヤーなしで直接行くことができます。
データ転送オブジェクトは、レイヤーと層の間でデータを転送するために使用される単なるデータ コンテナーです。主に属性が含まれます。ゲッターとセッターなしでパブリック属性を使用することもできます。データ転送オブジェクトにはビジネス ロジックは含まれません。
DTO には、独自のデータ (アクセサーとミューテーター) の格納と取得以外の動作はありません。