2011-10-21 3 views
0

때때로 나는 OO des를 사용하고 있습니다. 그리고 때로는 절차적인 스타일과 때마다 나는 자원을 낭비하는 것 같아. 나는 내가 datasource, bannerinfo의 풀에서 어떤 값을 가져와야 할 상황이 있다고 말한다. 추가 작업을 위해 배너 클래스와 데코레이터를 추가 기능을 선언 할 수 있지만 왜 그렇게 어려운 시퀀스를 할 것인가? 객체를 채우고 인스턴스화하고 채우고 감싸는 등의 작업을 수행해야합니다. 데이터를 가져 와서 실행합니다. 데이터에 대한 절차 코드; 예, 여러 번 논리를 구성하고 결정을 유연하게하는 데 도움이되지만, 반면에 그것은 설계 시간 낭비입니다. (나는 간단한 것들을 해결하면서 많은 문제를 겪고 oop 스타일을 사용합니다.) 분명히 기계 낭비입니다. 자원. 나는 그 사고 방식에 다소 집착하고 있습니다. 그러나 나는 이미 몇몇 프로젝트를 보았습니다. 나는 그들이 쉽게 이해할 수 있다고 말하지 않을 것입니다. oop의 idead는 꽤 매력적입니다. 논리적으로 정리하고 구성하는 것이지만 ... oop/procedural 스타일을 사용해야하는 상황의 차이점을 지적 해 주시겠습니까? 나는 그 주제에 관한 추가 문헌에 대한 어떤 링크도 appriciate 할 것이다. 감사합니다!. 내가 데이터를 처리하는 절차에 쉽게 될 수있는 방법을 볼 수 없습니다OO - 리소스 지출 및 디자인 혼란?

+0

proyect의 복잡성과 크기에 따라 OO는 절차 적 스타일보다 낫습니다. 둘 다 좋지만 각자 공간과 응용이 있습니다. 감사합니다 –

+0

나는 그 안개를 너무 많이 들었습니다. 실제 연구에 약간의 링크를 줄 수 있습니까? 아마, 이해와 나이와 경험을 함께 올 것이다,하지만 나는 좌절감을 느끼고 나가서/절차 적으로 가야할지 생각을 피곤합니다. –

+0

"이거 그냥 안됐다, 맞지?" SO에 대한 주제에 관한 건설적인 질문에 [faq]를 다시 읽으십시오. –

답변

0

잡는 데이터에는 구조가 있습니다. 즉, 데이터의 각 레코드 내에 필드가 표시되는 순서 출처. 해당 데이터에서 실행하려는 코드는 해당 구조와 밀접하게 연결되어 있습니다. 즉, 코드가 다른 데이터 구조에 적용되지 않으며 데이터 구조가 변경되면 확실히 코드를 변경하려고합니다. 따라서 "정신 정보 관리"관점에서 데이터와 행동을 함께 유지하는 것이 이치에 맞으며 객체는이를 수행하는 좋은 방법입니다.

프로그램이 커지고 프로젝트의 여러 위치에서 bannerinfo를 반복하고 싶다면 어떻게해야합니까? 물론 bannerinfo에서 원하는 것을 수행하는 전체 프로그램에서 사용할 수있는 루틴을 만들 수 있으며 필요한 곳마다 그 프로그램을 호출 할 수 있습니다. 그러나 당신이 bannerinfo로하고 싶은 다른 것들을 생각한다면 어떨까요? 물론 전체 프로그램에서 사용할 수있는 다른 루틴을 만들 수도 있지만 처음부터 완전히 분리되어있을 것입니다. 이 두 루틴에 공통된 코드가있어 별도의 루틴으로 푸시 할 수 있다면 다른 프로그램에서 사용할 수있는 루틴을 만들 수 있습니까?

OOP를 사용하면 두 개의 공용 메소드와 그 세 번째 루틴을위한 개인용 메소드가있는 클래스를 가질 수 있습니다. 왜 이것이 전체 프로그램에서 세 가지 루틴을 사용할 수있는 것과 다른 것입니까? 대답은 혼란 스럽다. 해당 클래스에 추가 메소드를 많이 만들 수 있으며, 특정 클래스를 사용하지 않는 부분에는 사용할 수 없으므로 혼란을주지 않습니다. bannerinfo의 데이터 구조가 변경되면 한 곳만 이동하면됩니다.

물론 더 있지만 OOP를 유용하게 사용할 수있는 방법을 보여주기를 바랍니다.그것의 모든 관리를 쉽게합니다. 특정 문제가 일회성이거나 성장하지 않기 때문에 문제가되지 않는다면 반드시 이점이있는 것은 아닙니다.

마지막주의 사항 : 이익을 얻는 것이 그만한 가치가 있는지 여부는 객체를 얼마나 편안하게 사용하고 있는지, 그걸로 무엇을하려하는지 (상속이 약할 수 있음), 그리고 언어 및 구문 자체.

0

"데이터에 대한 절차 적 코드를 실행 잡아 데이터". OOP 사용하면

$users = $db->from('users')->where('score',100,'>')->getMany(); 

처럼 또는 ORM으로 물건을 수행 할 수 있습니다

$user = $orm->entity('User')->findOne($id); 
$user->setPassword('abc123'); // set a new password 
$orm->save($user); 

를 (또한 MVC 아키텍처의 '보기'라고도 함) 데이터를 표시 대해서는, 장식이 될 수 있음을 동의해야 성가신. 그러나 템플릿 엔진을 사용하면 얻을 수있는 것처럼 쉽습니다. 어떤 언어를 사용하고 있는지 언급하지 않았지만 PHP를 사용할 수 있다면 Twig

개인적으로는 단위 테스트와 같은 작업도하지 않는 작은 프로젝트에서도 개인적으로 OOP를 더 편하게 느낍니다. . 하지만 OOP의 장점은 유지 보수성, 협업, 재사용 성 등을 필요로 할 때입니다.