2008-09-30 12 views
3

私はあまりにも多くのことをやっていると思う大きな「マネージャー」クラスを持っていますが、それをより論理的な単位に分割する方法はわかりません。大規模で膨大なクラスをより小さなクラスに分割する方法を教えてください。

一般クラスには、基本的には、以下の方法で構成されて話す:

 
class FooBarManager 
{ 
    GetFooEntities(); 
    AddFooEntity(..); 
    UpdateFooEntity(..); 
    SubmitFooEntity(..); 
    GetFooTypes(); 
    GetBarEntities(); 
} 

マネージャークラスは私のビジネスロジックの一部であり、すべてのCRUDが含まれているデータ・アクセス・レベルで別の「マネージャ」クラスのインスタンスをconstainsすべてのエンティティの操作

データアクセスレイヤーから異なるエンティティを取得しているため、データエンティティをビジネスエンティティに変換するためのマネージャクラス以外の場所にコンバーターがあります。

マネージャクラスの理由は、私がunittestingを行うときに、それぞれの "マネージャ"クラスを模擬したいと思ったからです。各マネージャクラスは現在1000以上のlocであり、それぞれ40〜50のメソッドを含んでいます。私はそれらがかなり肥大していると考えて、すべてのデータアクセスロジックを単一のクラスに入れるのは難しいと感じています。私は何をすべきですか?

どのように私はそれらを分割について行くと私は使用する必要があります特定のデザインパターンはありますか?

答えて

1

一般的でない限り、すべてのデータアクセスを1つのクラスに入れるべきではありません。まず、データアクセスクラスを、オブジェクトまたは関連するオブジェクトグループ(CompanyManager、CustomerManagerなど)ごとに1つのマネージャに分割します.1つの「godクラス」を使用してマネージャにアクセスする必要がある場合は、各マネージャのインスタンスを使用できますあなたの真のマネージャークラスで

+0

OKは論理的ですが、顧客のすべての注文を取得する必要があるビジネス層のxManagerでどうやったらいいですか? CustomerManagerとOrderManagerの両方への参照がありますか?顧客から電話を受けるときにその顧客の注文を取得しますか?マネージャーの多くのように思える? – Xerx

+0

あなたが今持っていることを考えれば、それは私がそれをやる方法です。どの事業者が業務を担当しているかを考えてください。実際の顧客に注文のリストを提供することを要求しない場合は、注文システムに顧客の注文リストを提供するように依頼します。 –

+0

悪い考えであるManagerクラスについてのメモを追加した場合は、これを+1します... – metao

0
 /FooManager 
Manager     (derive from Manager) 
     \ BarManager 

は自己説明

+0

これはFooManagerとBarManagerが本当に独立していて、抽象クラスから派生していないので、私が探していたものではありません。 -1 – Xerx

0

私は組成物を使用してお勧めであるべき。マネージャーがやっている機能について考えてみましょう。単一の責任の行に沿ってそれらを分割します。 FooBarManagerのほとんどは、Fooとbarエンティティのコレクションです。だから、最低でも、FooBarManager

public class EntityCollection<T> : IList<T> 
where T : BaseEntity 
{ /* all management logic here */} 
public class FooCollection : EntityCollection<foo> {} 
public class BarCollection : EntityCollection<bar> {} 
public class FooBarManager 
{ 
public FooCollection { /*...*/ } 
public BarCollection { /*...*/ } 
public FooBarManager() : this(new FooCollection(), new BarCollection()){} 
public FooBarManager(FooCollection fc, BarCollection bc) { /*...*/ } 
} 
1

あなたFooBarManagerから収集ロジックを抜け出すにはGod Objectアンチパターンによく似ています。

あなたのような状況では、Patterns of Enterprise Application Architectureに掘り下げて検討してください、Martin Fowler一見すると、Data Mapperを作成するように見えます。しかし、あなたのニーズに十分かもしれないActive Recordのような代替案を検討してください。

また、お使いのプラットフォームにORM library/softwareを使用することを検討してください。正当な理由なしに自分自身を構築することは、これらのツールによってすでに多かれ少なかれ解決済みの多くの問題に直面するだけです。

関連する問題