Oop 对象是否应该知道如何将自身添加到数据源?

Oop 对象是否应该知道如何将自身添加到数据源?,oop,Oop,我有一组对象,这些对象将从数据源1读取并写入数据源2中 创建类似IAddableToDataSourceTwo接口的东西很有诱惑力: public interface IAddableToDataSourceTwo function addToDataSourceTwo(connection As DataSource2Connection) as Boolean public class customer implements IAddableToDataSourceTwo

我有一组对象,这些对象将从数据源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,但更安全地将客户对象与数据源分离


建议?

在我看来,没有,因为它违反了法律。但是,您的建议与模式类似。我想这取决于你的立场


我经常问自己:“一封信(或电子邮件)应该知道如何发送吗?”。答案总是否定的。您通常会得到一个“LetterSender”类来完成这项工作。或者,在你的情况下,这是一个很好的问题,但它似乎更多的讨论活跃记录和贫血领域…我同意。在OO的早期,我们试图将各种责任添加到对象本身中。我们制造了一些真正的混乱。仅供参考:面向对象范例adserdum的一个很好的例子是OS/2的WorkplaceShell(WPS)。有人记得那件事吗?