2

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

例えば:

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

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

4

6 に答える 6

3

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

ファイルのサイズが大きくなり、制御を取り戻すために物事をグループ化する必要があると感じる場合は、クラスをいくつかのクラスにリファクタリングして、それぞれが元のクラスが行ったことのサブセットを担当するようにしてください。のオブジェクトであるテスト不可能な混乱に終わらない

于 2009-07-30T07:10:53.223 に答える
2

提案を実装する方法を示すコードが表示されないため、ここに追加します。機能に基づいてコードをクラスに分割する必要があります。次に、作成する各クラスに名前空間キーワードを追加します。詳細については、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 
于 2009-11-20T14:59:17.650 に答える
1

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

このような

SOLID と Uncle Bob (Robert C. Martin) について少しググってみてください。

于 2009-07-30T15:55:47.040 に答える
1

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

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

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

#Region "Maintenance"
    ... code ...
#End Region
于 2009-07-30T07:03:16.640 に答える
0

Region は、私がお勧めする 1 つのソリューションです。ただし、部分クラスを使用することもできます。

于 2009-07-30T07:05:55.917 に答える
0

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

(何よりも、自分の VB.NET の作業に SOLID を適用するように独学しようとしています。これは、実装することになったようなものですか?)

于 2009-11-20T14:44:50.777 に答える