2011-07-15 29 views
0

このコードには匂いがありますが、この特定の実装ではこのプロジェクトに適しています。私は社員コードとTierNameを持っている層で1対1の関係がある場合、テーブルに参加していFluent NHibernate Mapping Left Join

public class InvestmentAdvisorMap: ClassMap<InvestmentAdvisor> 
{ 
    public InvestmentAdvisorMap() 
    { 
     Id(x => x.EmployeeID).GeneratedBy.Assigned() 
      .Access.CamelCaseField(Prefix.Underscore); 

     Not.LazyLoad(); 
     Table("Employee"); 
     //need mapping to tierName here???? that links to join table 
    } 
} 

public class InvestmentAdvisor 
{ 
    private readonly Guid _employeeID; 
    private string _tierName; 

    public Tier Tier 
    { 
     get 
     { 
      switch (_tierName) 
      { 
       case "<$100K": 
        return Tier.LessThan100K; 
       case "$100K+": 
        return Tier.MoreThan100K; 
       case "$240K+": 
        return Tier.MoreThan240K; 
       case "$400K+": 
        return Tier.MoreThan400K; 
       case "$600K+": 
        return Tier.MoreThan600K; 
       case "$1M+": 
        return Tier.MoreThan1M; 
       default: 
        return Tier.LessThan100K; 
      } 
     } 
    } 

    public string TierName 
    { 
     get { 
      return _tierName; 
     } 
    } 

    public Guid EmployeeID 
    { 
     get { return _employeeID; } 
    } 
} 

}

、私は私の人生のためにカントマッピングクラスを行う方法をfiguire、基本的に複合エンティティですが、偉大な例は見つかりません

+0

私は真剣にデザインを変更することを検討したいと思います。 InvestmentAdvisorにTierオブジェクトへの参照を保持させ、スイッチブロックから名前文字列を生成させてみませんか? – UpTheCreek

+0

私はあなたが正しいと思っています。私は本当に今の様子が好きではありません。私の問題は、永続的なTierオブジェクトがないことです。静的クラスを返す文字列に基づくKeyです。しかし、もう一度私が説明するように、すべてがさらに悪化する臭いが始まる –

答えて

0

継承階層についてはどうですか?

public abstract class Tier 
{ 
    public abstract void DoSomething(); 
} 

class TierMap : ClassMap<Tier> 
{ 
    public TierMap() 
    { 
     DiscriminateSubClassesOnColumn("TierName"); 
    } 
} 

public class LessThan100K : Tier 
{ 
    public override void DoSomething() 
    { 
     // Do something useful 
    } 
} 

class LessThan100KMap : SubclassMap<LessThan100K> 
{ 
    public LessThan100KMap() 
    { 
     DiscriminatorValue("<$100K"); 
    } 
} 

などとなる。

+0

フィロ、私が実装したものよりも良いアイデアが、次のリファクタリングになると思う、ありがとう。 –

+0

@Brandon Grossuttiは、グループごとに適用することができる、ディスプレイ構成用のさまざまなティアクラスの追加フィールド – Firo