2012-01-25 6 views
2

データソース1から読み込まれ、データソース2に書き込まれる一連のオブジェクトがあります。それは滑りやすい斜面可能性のようなオブジェクトがデータソースに自分自身を追加する方法を知っていますか?

public interface IAddableToDataSourceTwo 
    function addToDataSourceTwo(connection As DataSource2Connection) as Boolean 

public class customer implements IAddableToDataSourceTwo 
    public function addToDataSourceTwo(connection as DataSourceConnection) as Boolean 
     insertSQL = "insert into customers values....." 
     return connection.nonQuery(insertSQL) 

しかし、それはそう:

それはIAddableToDataSourceTwoインタフェースのようなものを作成するために魅力的です。オブジェクトがデータソースに自身を追加する方法を知っていなければなりませんか?

代替オプションは、このような何かを行うことです....

public class DataSource2Writer() 
    public function writeCustomer(connection, customer as Customer) 
     insertSQL = "insert customer into customers values....." 
     return connection.nonQuery(insertSQL) 

    public function writeInvoice(connection, invoice as Invoice) 
     insertSQL = "insert into Invoices values....." 
     return connection.nonQuery(insertSQL) 

これは、はるかに少ないOOのようだが、より安全にデータソースから顧客オブジェクトを分離します。

提案?

+1

これは大きな質問ですが、アクティブレコードと貧血ドメインの間の議論のほうが多いようです。 – Rikon

答えて

2

私の意見では、それはSingle Responsibility Principleに違反しています。しかし、あなたが提案しているものはActive Recordパターンに似ています。私はそれがあなたの立場に依存していると思う:SRP。

私は自分自身に「手紙(または電子メール)に自分自身を送信する方法を知らせるべきか」とよく尋ねます。常に答えはノーです。通常は、これを行うために "LetterSender"クラスが完成します。または、あなたの場合は「CustomerDataMapper」です。

+0

私は同意します。オブジェクト指向の初期段階では、オブジェクトそのものにあらゆる種類の責任を追加しようとしました。私たちはいくつかの本当の混乱を作りました。参考:OOパラダイムの大きな例であるad adserdumは、OS/2のWorkplace Shell(WPS)でした。誰でもそこを覚えていますか? – ahoffer

関連する問題