2009-07-30 5 views
1

私は現在「Customers」という名前のVB.NETクラスを持っていますが、着実に成長しており、今では数十の機能を持っています。同じクラスの機能を維持する方法はありますか?彼らは依然として共通のプライベートメソッドを使用していますが、類似性によってそれらをグループ化しているからです。例えばASP.NETクラスで関数をグループ化するにはどうすればよいですか?

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

UPDATE:私は私がこのグループ分けが発生したかった場所に明確ではなかったと思います。私は、Customerクラスを使用すると、グループ化がIntelliSenseの名前空間/クラスに似ていることを望みます。私は現在リージョンを使用していますが、クラスを使用するときではなく、コードを見るときにのみ役立ちます。

答えて

3

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

ファイルをグループ化して制御を取り戻す必要があるようなサイズになった場合、元のクラスのサブセットを担当する複数のクラスにクラスをリファクタリングする必要があります。

1

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

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

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

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

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

1

私のように、Customersクラスが多すぎるかもしれないし、Single Responsibility Principleを遵守するために細分化する必要があると思われます。アイデアは、クラスが1つのことをうまくやり遂げる方法を知っており、データを取得することは、前記データを用いてビジネスロジックを実行することとは異なる責任であるということです。私は現在、モノリシックなクラスをより小さく、よりターゲットを絞ったクラスに細分化しようとする学習プロセスを進めています。私はこれを行う方法について大きな助言を与えることはできませんが、ウェブ上の多くのリソースが役立ちます。

like this

余分な追加善のためSOLIDとアンクルボブ(ロバートC.マーティン)のためのGoogleのビットを持っています。

0

クラスをはるかに小さなクラスに分割すると、それらを任意の深い名前空間システムに配置することができます。 Project.Customer.Data名前空間には、GetCustomerObjectクラスとGetCustomerFieldクラスを格納できます。

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

2

私は表示されません提案を実装する方法を示すコードですので、ここでそれを追加します。関数に基づいてコードをクラスに分割する必要があります。次に、作成した各クラスにnamespaceキーワードを追加します。詳細はこちら(http://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic3)のMSDN記事をご覧ください。ここに擬似コードがあります。次に、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 
関連する問題