2012-01-25 4 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 초기에 우리는 모든 종류의 책임을 객체 자체에 추가하려고했습니다. 우리는 진짜 엉망진창을 만들었습니다. 참고 자료 : OO 패러다임의 훌륭한 예인 ad adserdum은 OS/2의 Workplace Shell (WPS)이었습니다. 거기 누구든지 그걸 기억하니? – ahoffer

관련 문제