Должен ли объект знать, как добавить себя в источник данных? - PullRequest
2 голосов
/ 25 января 2012

У меня есть набор объектов, которые будут считаны из источника данных один и записаны в источник данных два.

Соблазнительно создать что-то вроде интерфейса 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)

Это выглядит намного меньше ОО, но разъединяетКлиент объект из источника данных более безопасно.

Предложения?

1 Ответ

2 голосов
/ 26 января 2012

На мой взгляд, нет, поскольку это нарушает Принцип единой ответственности . Однако то, что вы предлагаете, похоже на шаблон Active Record . Я думаю, это зависит от вашей позиции: SRP.

Я часто спрашиваю себя: «Должно ли письмо (или электронное письмо) знать, как отправить себя?». Неизменно ответ - нет. Вы обычно получаете класс «LetterSender» для этого. Или, в вашем случае, « CustomerDataMapper ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...