对象应该知道如何将自己添加到数据源吗?

时间:2012-01-25 14:28:52

标签: oop

我有一组对象将从数据源1读取并写入数据源2。

很有可能创建类似IAddableToDataSourceTwo接口的东西:

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)

然而,看起来这可能是一个滑坡。对象应该知道如何将自己添加到数据源吗?

另一种选择是做这样的事情......

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 个答案:

答案 0 :(得分:2)

在我看来,不会违反Single Responsibility Principle。但是,您所建议的内容与Active Record模式类似。我想这取决于你的立场:SRP。

我经常问自己“信件(或电子邮件)应该知道如何发送自己吗?”总是,答案是否定的。您通常最终会使用“LetterSender”类来执行此操作。或者,在您的情况下,“CustomerDataMapper”。