필자는 시스템에 명령 패턴을 구현했습니다. 주로 여러 계층이 있고 논리를 원격으로 호출해야하기 때문입니다.명령 패턴에 대한 추악한 경험 : OOP의 모든 점은 무엇입니까?
class DoWorkCommandMessage { int param; }
class DoWorkCommandHandler : Handler<DoWorkCommandMessage>
{
Execute(MyObject object) {
object.DoWork(message.param);
}
}
class MyObject
{
void DoWork(int param) {
_proxy.SendMessage(new DoWorkBinaryMessage(param));
}
}
당신은 내가 기본적으로 다음 다른 계층에 전송되는 메시지로 다시 변환하는 메서드 호출로 변환, 메시지는 무엇입니까 볼 수 있듯이.
여기 뭔가 잘못 된 것 같습니다.
모든 메서드를 제거하기 위해 리팩터링하는 작업이 끝나고 간단한 ProcessMessage 메서드로 바뀌 었습니다.이 메서드는 메시지를 가져 와서 변환 한 다음 디스패치합니다. myObject에 대부분 단지 변환 코드가 아닌 '객체'었죠 제외
이
은단위 테스트하기 위해 내가 대신 간단한 메서드 호출을 만드는) processMessage를을 (계속 전화해야 ... 확인했다 .
"메시지 & 변형"과 "메시지 -> 방법 -> 메시지"사이의이 전투에 대한 생각을 찾고 있습니다. 분명히 메시지와 방법은 매우 밀접하게 관련되어 있습니다.
MyObject에서 동작이나 논리를 사용할 수없는 이유는 무엇입니까? 당신의 "MyObject"가 좀 더 구체적 일 수 있고 프록시로 서 있기보다는 로직을 수행 할 수 있습니까? – Thurein
MyObject는 실제로 필드에있는 하드웨어의 비트를 나타내는 "개체"입니다. 서버에는이 분야에 수천 개의 하드웨어 장치가 있기 때문에 그러한 많은 객체가 있습니다. 실제 하드웨어 장치는 대부분의 상태를 유지하고 메시지를 보내며 본질적으로 가장 최근의 상태를 서버에 캐시합니다. 나는 OOP 방식으로이 장치를 모델링할지 아니면 그냥 귀찮게하지 않을지에 관해서 찢어진 것이다. 단위 테스트를 작성하면 좋은 방법으로 테스트 할 수있다. 그렇지 않으면 전혀 사용하지 않는다. – Schneider
항상 달성하려고하는 것에 의존한다. . 당신이 필요로하지 않았던 것처럼 보입니다. – ivowiblo