2016-09-08 9 views
2

は、非常に多くの場合、私は、ビジネス・オブジェクト内にあるべきロジックのようなどこにでも繰り返されるコードに実行!(脱カプセル化?):アンチパターンの名前は何ですかstring.IsnullOrEmpty(Employee.Name)、

if (!string.IsNullOrEmpty(Employee.Name)) Display(Employee.Name); 

これは次のようになります。

if (Employee.IsNameSpecified) Display(Employee.Name); 

およびEmployee.IsNameSpecifiedは、論理値が指定されています。

これは単なる一例に過ぎず、ビジネスオブジェクトに関する論理的な決定を行うために使用される手続き型コードは、OOPの逆であることを心に留めています。

LogicがBusinessObjectにカプセル化されている場合、これは正常なOOPのプラクティス(または名前が異なるdoeas)ですか、反対のものは何ですか?脱カプセル化?

+1

私はそれの名前を聞いたことがない。私はちょうどそれが "カプセル化に違反している"、または "懸念の分離に違反している"と言う。 – 4castle

+1

"スパゲッティコード"または "コピペスタ"と呼ぶことができます。 – 4castle

+0

@ 4castle:copypastaは新しいです!前にそれを聞いたことはありません、感謝! – Arjang

答えて

2

あなたはTDA(尋ねないでください)の1つの味として見ることができます。

ここで何をしていますか:クライアントコードは、別のクラスが所有する「プロパティ」を取得し、その値に基づいて決定します。

TDAはあなたの質問について正確に意味します:クラスはあなたのためにその決定を下すべきです - あなたのクライアントコードはその決定をするための規則を知ってはいけません。

ここで、「再帰」に注意してください:提案された「解決法」は依然としてTDAに違反しています。あなたはであり、他のクラスから値を取得しているので、クライアントコードはその値を決定することができます。

唯一の違い:最初のケースでは、文字列を取得し、クライアントはその文字列がnull /空であるかどうかをチェックします。 2番目のケースでは、何をすべきかを示すブール値を取得します。

ので、「理想的な」オブジェクト指向のソリューションは、より多くのようになります:

employee.display(); 

と従業員は、自分自身で完全に正しいことをやって。しかし、確かに、この実装は、たとえば、SRPの違反にすぐに変わります。従業員クラスが本当に自分自身を「表示」することを知っていなければなりませんか?

+0

はそのビジネスオブジェクトのViewModelに表示されるはずですか?バロッドの表示値と見なされるもののルールを集中化することができます。 – Arjang

+1

実際のコンテキストに依存していると思います。ビジネスオブジェクトにViewモデルがある場合は、おそらくはいです。私は追加の質問は実際にあなたの全体的なデザインとモデルに依存すると思います。 – GhostCat

1

あなたの例では、アンチパターンではありません(とMVCパターンに違反する):

  1. あなたのEmployeeクラスは、あなたのモデルの一部です。
  2. ifはViewクラスでなければなりません。これは、Modelレイヤの要素を表示するViewクラスの役割です。
  3. あなたのメソッドがIsNameSpecifiedは、従業員の名前を表示する必要があるかどうかを判断するためにここで使用されます。

1 + 2 + 3:あなたのメソッドはビュークラスで実装する必要があります。 にはありません。

したがって、このメソッドはViewクラスにあります:IsNameSpecific(従業員e)。ロジック(および他の開発者のもの!string.IsNullOrEmpty)に従ってください。その実装には1つの命令しか含まれません。人々はこの種の方法を書かないように選択することは明らかです。

@GhostCat:employee.display();明らかにa 間違い ...このアプリケーションの特定の顧客の場合、従業員は単なる数字である場合を想像してください。他の顧客にとっては、それは名前と役割です...など...

あなたのモデルの役割は情報を構造化することだけです。それ自体を表示しない。

+0

私は本当に好きです "あなたのモデルの役割は情報を構造化することです。それ自体を表示しない"非常に洞察力があります、ありがとう – Arjang

関連する問題