質問

現在、「Customers」という名前のVB.NETクラスがあります。そして、そのサイズは着実に成長しており、今では数十個の機能があります。同じクラスの関数を維持する方法はありますか?まだ一般的なプライベートメソッドを使用していますが、類似性によってグループ化しています。

例:

Class Customers
-GetData
---GetCustomerObject()
---GetCustomerFieldx()
-Lists
---GetSomeList()
---GetAnotherList()
-Maintenance
---AddCustomer()
---DeleteCustomer()
---UpdateCustomer()

更新:このグループ化をどこで実行するかは明確ではなかったと思います。 Customerクラスを使用するときに、グループ化を IntelliSense の名前空間/クラスのようにしたいのです。現在はリージョンを使用していますが、クラスを使用するときではなく、コードを表示するときにのみ役立ちます。

役に立ちましたか?

解決

一般的に、ファイル内のコンテンツをグループ化する地域はお勧めしません。

ファイルが大きくなり、制御を取り戻すために物事をグループ化する必要があると感じた場合、それは、元のクラスのサブセットをそれぞれ担当するいくつかのクラスにクラスをリファクタリングしようとするヒントです神オブジェクト

であるテスト不能な混乱に終わらないこと

他のヒント

提案の実装方法を示すコードは表示されないため、ここに追加します。関数に基づいてコードをクラスに分割する必要があります。次に、作成する各クラスに名前空間キーワードを追加します。詳細については、MSDNの記事( http://msdn.microsoft .com / en-us / library / ms973231.aspx#assenamesp_topic3 )。擬似コードは次のとおりです。次に、projectname.namespace.classname.methodを使用してコードを参照します。

namespace Customers
-Class GetData 
---GetCustomerObject() 
---GetCustomerFieldx()
end namespace

namespace Customers 
-Class Lists 
---GetSomeList() 
---GetAnotherList() 
end namespace

namespace Customers 
-Class Maintenance 
---AddCustomer() 
---DeleteCustomer() 
---UpdateCustomer()
end namespace 

ソースファイルでコード領域を使用します。これにより、展開/折りたたみボタンが表示されるため、ファイルのセクションを非表示にできます。

#Region "GetData"
    ... code ...
#End Region

#Region "Lists"
    ... code ...
#End Region

#Region "Maintenance"
    ... code ...
#End Region

Customersクラスの処理が多すぎる可能性があり、単一責任原則を順守するために分解する必要があるように思えます。アイデアは、クラスが1つのことをうまく行う方法を知っており、データを取得することは、そのデータを使用してビジネスロジックを実行することとは異なる責任であるということです。私は現在、モノリシッククラスをより小さく、よりターゲットを絞ったクラスに分割しようとする学習プロセスを行っているので、これを行う方法について大きなアドバイスをすることはできませんが、Webには多くのリソースがあります:

このような

SOLIDとUncle Bob(Robert C. Martin)にグーグルを少し追加して、追加の良さを提供してください。

地域は私が推奨する一つの解決策です。ただし、部分クラスを使用することもできます。

また、クラスをもっと小さなクラスに分割すると、任意の深さのネームスペースシステムにそれらを配置することができます。 Project.Customer.Data名前空間は、GetCustomerObjectクラスとGetCustomerFieldクラスを収容できます。

(とにかく、私は自分のVB.NETの仕事にSOLIDを適用するように自分自身に教えようとしています。これはあなたが実装することになった種類ですか?)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top