2

1 か所でしか使用されないクラス オブジェクトがある場合、プログラミングとアーキテクチャが貧弱であることはわかっています。しかし、私はまた、すべてが強力で、あまりにも多くのことを行うことができるオブジェクトを作成することについて警告されています. では、どうすればこれを分解できますか?これは私が言いたいことの例です - これは単なる例であるため、これらのことを文字通りに解釈しないでください.

とにかく、かなり複雑なオブジェクトを扱っています。このオブジェクトには多くの情報が格納され、データに対して多くの操作を実行できます。では、この物体を地球と呼びましょう。

Public Class Planet
Private _population As UInteger = 0
Public ReadOnly Property Population() As UInteger
    Get
        Return _population
    End Get
End Property

Public Overridable Sub CreatePerson(Optional ByVal numberOfPeople As Integer = 1)
    _population += numberOfPeople
End Sub
End Class

これまでのところ十分に単純です。しかし、私はオブジェクトが実行できる可能性のある多くのことを続けることができました. そこで、物事が複雑になりすぎないようにするために、昼と夜の 2 つのオブジェクトを作成して、日中と夜間に発生する「アクティビティ」を分類しました (この 2 つは表示されていません)。これで、Planet クラスが更新されました。

Public Class Planet

Private _population As UInteger = 0

Private _day As New Day
Private _night As New Night

Public ReadOnly Property Day() As Day
    Get
        Return _day
    End Get
End Property

Public ReadOnly Property Night() As Night
    Get
        Return _night
    End Get
End Property

Public ReadOnly Property Population() As UInteger
    Get
        Return _population
    End Get
End Property

Public Overridable Sub CreatePerson(Optional ByVal numberOfPeople As Integer = 1)
    _population += numberOfPeople
End Sub

End Class

現在、これら 2 つのクラス (Day と Night)は、Planet クラス以外では使用されません。これは、この「親」クラス Planet のメソッドと属性を整理する良い方法ですか? 他にどうすれば同様にきちんと整理できますか?

リファクタリングについて読んだことがありますが、これは私の場合には役に立たないと思います。次のように Planet オブジェクトを呼び出せるというアイデアが気に入っていますEarth.Night.BlowUpMoon

4

3 に答える 3

2

あなたの例は不自然ですが、この状況はドメイン駆動設計では一般的です。Planet クラスは、独自の内部エンティティを管理するルート オブジェクトである集約になります。集約境界の外では、すべての相互作用はルート集約オブジェクトを介して行われます。

于 2011-07-13T18:43:45.910 に答える
2

見つけやすさの観点から考えてください。他の誰かがあなたのオブジェクトを使用した場合、月を爆破するために特定の時間に行かなければならないことを彼らは知っていBirthdayCard.September25th.Send()ますか? 「他の誰か」による任意の 6 か月のあなたも含まれます。整理するために整理していますか、それとも同様のメソッドとプロパティを意味のある方法でまとめていますか?

于 2011-07-13T18:20:49.960 に答える
1

クラスをリファクタリングし、それぞれが単一の責任を持ついくつかの小さなクラスに分割します。それぞれが 1 回しか使用されないことは問題ではありません。コードはより良くなり、理解しやすくなり、はるかにテストしやすくなります。

于 2011-07-13T18:16:44.843 に答える