2013-02-06 2 views
0

저는 OOP에서 비교적 새롭습니다.OOP의 메소드에 대해서

클래스, 메서드 등을 이해하지만 철학에 문제가 있습니다.

지금은 프로젝트 관리, 클래스, 메소드, 변수, 사용자, 그룹, 로그 및 작업 관리를 사용하여 프로젝트를 관리하는 프로젝트를 진행하고 있습니다.

그래서, Project 클래스로 시작, 난했습니다 그 :

public function create_project() 
public function get_projects() 
public function delete_project() 

그런 다음, ProjectClass 클래스 :

public class create_class() 
public class get_classes() 
public class delete_class() 

그러나, 나는 그 올바른 방법은 아니지만, 그래서 ' 다음으로 변경 :

Project 클래스 방법 :

SET_NAME, get_name (그리고 유사한 방법) add_class get_classes add_log get_logs

ProjectClass 클래스 메소드 :

set_project_id add_method 을 ... add_variables을 (얻을) (얻을)

따라서 첫 번째 경우에는 Project 클래스가 새 프로젝트를 만들고, ProjectClass 클래스는 클랜을 만들고, Method 클래스는 cre 두 번째 경우에는 클래스를 만들고 관리하는 클래스 인 Project이고 메서드를 만들고 관리하는 클래스는 ProjectClass입니다.

그래서 이러한 "스타일"중 어떤 것이 맞습니까?

두 번째 사례가 올바른 경우 누가 프로젝트를 생성합니까? 그 자체?

은 당신이 할당 할 분명한 책임이없는 (그리고 이것에 의해 내가 게터에서 외부 동작을 의미하는 경우 디자인이 다른 것보다 더 나은 경우 말해 정말 어려운 일반적인 경우에 당신에게

답변

0

정말 고마워요 및 세터). 시간이 갈수록 한 번에 한 가지 문제를 해결하고 필요에 따라 디자인을 리팩터링하여 초기 디자인에서 반복/점진적 디자인으로 옮겼습니다. 이 경우 시스템의 기본 요구 사항을 세우고 각각의 설계 구현주기를 시작하여 새로운 요구 사항을 해결할 때 모델을 재구성하려고합니다.

이 예제를 고려해보십시오. 프로젝트에 묶여 있지 않은 클래스를 갖는 것이 합리적입니까? 대답이 인 경우 인 경우 Project>>createClass(aClassName)과 같은 메서드를 사용하는 것이 좋습니다. 이는 프로젝트의 컨텍스트에서 클래스가 만들어 졌음을 명시하고 있기 때문입니다. 또한 클래스와 메서드 구현 내에서 속한 프로젝트 사이에 적절한 연결을 만들 수 있습니다. 그러나 프로젝트를 매개 변수로 사용하는 ProjectClass 클래스의 생성자를 정의하는 것도 유효한 방법입니다. 그런 식으로 "새로운 수업을 만들고 싶다면 프로젝트가 속한 곳에 프로젝트를 제공해야합니다."라고 말하는 것입니다.어떤 접근법은 많은 것들에 달려 있는데, 그 중 하나는 프로그래머의 취향이다. :) 그래서 평가하기위한 특정 상황을 갖지 않고 다른 것이 더 낫다면 진술하기가 정말로 어렵다. 도움이된다면

마지막으로 언급 할 가치가있는 몇 가지가 있습니다 :

  • public function create_project()는 인스턴스 메서드라고 가정은, 왜 Project의 인스턴스는 다른 프로젝트를 만드는 방법을 알고 있나요? 처음에는 그다지 이해하지 못합니다. 그 이유는 기본적으로 클래스 측의 책임이기 때문입니다 (예 : Prototype 패턴).
  • 프로젝트가 get_projects()에 응답하는 이유는 무엇입니까? 그들은 어떤면에서 관련이 있습니까? 아니면 모든 프로젝트를 나열합니까? 다시 한번, 이것은 클래스 측 책임처럼 들립니다.
  • 나는 일반적으로 메시지 수신자가 메시지의 일부로 나타내는 개념을 추가하고 싶지 않습니다. 따라서 $project->delete_project() 상태로 중복되므로 메시지 delete_project()을 호출하지 않습니다. 이미 메시지의 수신자가 프로젝트라는 것을 알고 있습니다.
  • 클래스 이름과 일치해야합니다. ProjectClass을 사용하여 클래스를 표현한 경우 ProjectMethod을 사용하여 메서드를 나타낼 수 있습니다 (개인적으로이 이름이 마음에 들지 않지만 IMHO는 오해의 소지가 있습니다). 적절한 이름을 선택하고 도메인 모델에서 일관성있게 유지하는 것이 중요합니다.

HTH