デザインパターンのスキルを磨こうとしていますが、これらのパターンの違いは何ですか?それらはすべて同じもののように見えます。特定のエンティティのデータベースロジックをカプセル化して、呼び出し元のコードが基盤となる永続層を認識しないようにします。私の簡単な調査から、それらはすべて、通常、標準のCRUDメソッドを実装し、データベース固有の詳細を抽象化します。
命名規則(例:CustomerMapper、CustomerDAO、CustomerGateway、CustomerRepository)とは別に、違いは何ですか?違いがある場合、いつどちらを選びますか?
以前は、次のようなコードを記述していました(単純化すると、当然、通常はパブリックプロパティを使用しません)。
public class Customer
{
public long ID;
public string FirstName;
public string LastName;
public string CompanyName;
}
public interface ICustomerGateway
{
IList<Customer> GetAll();
Customer GetCustomerByID(long id);
bool AddNewCustomer(Customer customer);
bool UpdateCustomer(Customer customer);
bool DeleteCustomer(long id);
}
そしてCustomerGateway
、すべてのメソッドに特定のデータベースロジックを実装するクラスがあります。インターフェースを使用せず、CustomerGatewayのすべてのメソッドを静的にすることがあるので(テストが難しくなることはわかっています)、次のように呼び出すことができます。
Customer cust = CustomerGateway.GetCustomerByID(42);
これは、データマッパーパターンとリポジトリパターンの場合と同じ原則のようです。DAOパターン(ゲートウェイと同じだと思いますか?)も、データベース固有のゲートウェイを促進しているようです。
私は何かが足りないのですか?同じことを3〜4つの異なる方法で行うのは少し奇妙に思えます。