2012-01-05 4 views
1

많은 종속 객체를 삭제하는 트리거를 사용하여 객체 삭제를 설계하는 가장 좋은 방법을 알고 싶습니다.많은 종속 객체가있는 객체를 삭제하기위한 OOP 설계

다음은 예입니다. Employer 클래스가 있습니다. 사용자가 삭제되면 모든 작업, 인보이스가 삭제됩니다. 작업이 삭제되면 범주 선택도 삭제됩니다. 등등. 따라서 Employer의 삭제가 더 많은 객체에서 삭제를 트리거하는 것을 볼 수 있습니다. 문제는 종속 객체 삭제에 필요한 많은 인수를 Employer 클래스의 delete 메소드에 전달해야한다는 것입니다.

다음은 단순화 된 예입니다. 메인 클래스를 상상해보십시오. Main 개체가 삭제되면 Dep1, Dep2 개체도 함께 삭제해야합니다. Dep1이 삭제되면 Dep11도 삭제해야합니다. 삭제 방법이 Dep1.delete (arg1), Dep2.delete (arg2), Dep11.delete (arg3) 인 경우 Main의 delete 메소드는 다음과 같아야합니다 : Main.delete (arg1, arg2, arg3) . 너 알지? 더 많은 객체가 Main에 의존합니다 - 삭제를 위해 더 많은 인수가 필요할 것입니다.

데이터베이스에서 삭제, 즉 "비즈니스 논리"의미에서의 삭제에 관심이 있다는 점도 지적해야합니다. 나는 심지어 "delete"객체를 delete 메소드에서 설정 해제하지 않았다. 내가 생각 한 어떤 옵션

: 별도의 객체로 삭제에 필요한 인수를 그룹화

  • . 나는이 모든 논의가 어떻게 그룹화 될 수 있는지 보지 못한다. 그들은 단순히 함께 속하지 않습니다. 예를 들어 Invoice_searcher와 Job_searcher가 필요한 경우 - 왜 그들은 하나의 객체에서 함께 사용됩니까? 그리고 어떤 대상이 될 수 있습니까?
  • Employer 클래스의 delete 메소드에서 종속 오브젝트를 삭제합니다. 이 경우 자식에 대한 delete 메소드를 명시 적으로 호출하지 않으면 시스템이 일관성없는 상태로 남습니다. 나는 그것을 피하고 싶습니다. 한 번 u는 적은 참조 자동으로 될 것입니다 직원 참조가 적은 다른 수 있도록하는 방식으로 구성을 사용하는
+0

귀하의 질문에 답변하지 못해 죄송합니다.하지만 Udi Dahan은 "삭제"라는 용어에 대한 훌륭한 블로그를 게시했습니다. http://www.udidahan.com/2009/09/01/dont-delete-just-dont/ – Kane

+0

그게 전부입니다 흥미로운 관점이지만 내 문제를 해결하지 못하고 "삭제하지 않음"을 논의하는 것이이 질문의 맥락에서 벗어난 것입니다. –

+2

종속 객체 삭제시 어떤 종류의 인수가 필요합니까? 'object.deleteYourself()'는 다른 입력을 요구하지 않아야하는 상당히 간단한 지시처럼 보입니다. – MrMisterMan

답변

1

매개 변수를 삭제 함수에 전달하는 경우 실수를 저지르고 있습니다.

객체이있는 당신은 당신의 삭제 기능이의 부모 인 다른 객체를 식별 할 수 있어야합니다 호출합니다.

저는 오브젝트을 강조합니다. 관계형 관점에서 볼 때이 소리가 들리기 때문입니다.

+0

이 상황에 대한 올바른 대답이라고 생각합니다.MrMisterMan은 그의 코멘트에서 같은 것을 제안했습니다. –

0

봅니다 ....

다른 방법은 경우, 중첩 클래스의 도움이 걸릴 것입니다 가장 많이 캡슐화하는 클래스는 을 참조하지 않은 다른 클래스도 자동으로 참조 해제되지 않게됩니다. (하지만 다른 클래스에서는 중첩 클래스의 참조를 꺼내지는 않습니다.)

+0

아마, 문제는 데이터베이스에서 개체를 삭제하는 것, 즉 비즈니스 논리 도메인에서 개체를 삭제하는 것이 아니라는 것을 분명히해야합니다. –

0

작업장에서 삭제할 코드를 많이 작성할 필요가 없으므로 소금으로 곡을 들어보십시오. 이러한 객체/레코드가 생성되는 방법을 살펴보고 같은 방식으로 삭제 작업을 처리하는 것이 도움이 될 수 있습니다.예를 들어, 생성 논리는 다음과 같은 경우 :

  1. 어쩌면 삭제 논리는 다음과 같아야 이상의 고용주

  • 준 송장 송장 작성 고용주에게
  • 만들기 :

    1. 인보이스 협회와 고용주를 삭제하십시오.
    2. 삭제 송장 (들)
    3. 삭제 고용주

    만큼 실체도 consistant 것을 입증해야 역순으로 삭제, 일관성있는 방법으로 만들어지면

  • .

    +0

    문제는 인보이스없이 고용주를 만들 수 있으며 인보이스는 고용주 개체가 아닌 언제든지 별도로 생성된다는 것입니다. 그러나 삭제는 고용주가해야합니다. 삭제 방법을 알고 있습니다. 문제는 여기에 주 부모 (고용주)에 의존하는 엔티티를 삭제하기에는 너무 많은 인수입니다. –

    +0

    인보이스가 Employer 객체와 독립적으로 생성되는 경우 Employer 객체와 별도로 삭제하지 않으시겠습니까? 나는 고용주가 삭제를 책임 져야한다는 요구 사항이라고 생각하지만, 일반적으로 발생하는 인보이스 (및 다른 어린이)를 생성하는 것은 아닙니다. 그러나 그 요구 사항이 진정으로 요구 사항이라면 나는 (모든 인수를 전달하여) 어떤 객체를 삭제해야하는지 고용주에게 알리는 것 외에는 할 수있는 일이 없다고 생각합니다. –

    +0

    고용주와 송장을 독립적으로 (다른 방법을 사용하여) 삭제하면 시스템이 일관성없는 상태에 놓일 수 있습니다 (모든 고용주가 아닌 인보이스) –

    관련 문제