2017-07-03 6 views
0

私はこのようなクラスを持っている:今、私はクラスのチームでのIDの新しい値を設定する必要がでユースケースを持ってセッターやビルダーを使って何が望ましいですか?

public class Team 
{ 
    private final String id; 

    private final String subOrgId; 

    private final String teamName; 

    private final String costCenter; 

    private final String email; 

    private final String seaSecurityGroup; 

    private final String expesoSecurityGroup; 

    public Team(final String id, final String subOrgId, final String teamName, final String costCenter, 
      final String email, final String seaSecurityGroup, final String expesoSecurityGroup) 
    { 
     this.id = id; 
     this.subOrgId = subOrgId; 
     this.teamName = teamName; 
     this.costCenter = costCenter; 
     this.email = email; 
     this.seaSecurityGroup = seaSecurityGroup; 
     this.expesoSecurityGroup = expesoSecurityGroup; 
    } 

    public String getId() 
    { 
     return id; 
    } 

    public String getSubOrgId() 
    { 
     return subOrgId; 
    } 

    public String getTeamName() 
    { 
     return teamName; 
    } 

    public String getCostCenter() 
    { 
     return costCenter; 
    } 

    public String getEmail() 
    { 
     return email; 
    } 

    public String getSeaSecurityGroup() 
    { 
     return seaSecurityGroup; 
    } 

    public String getExpesoSecurityGroup() 
    { 
     return expesoSecurityGroup; 
    } 
} 

。私は、このためにクラスのセッターを作るべきであるとの意見を持っています。しかし、私はおそらくビルダーを作ってそれを使うべきだとも思っています。セッターを書くのはそれほど難しくありませんが、私は正しいパターンを先に進めていきたいと思っています。そのような場合には何が推奨されますか?

ありがとうございます!

+0

確かに分かりますが、これはJavabeanの可能性がある他のPOJOのように見えます –

+0

私の意見では、ビルダーは正しいパターンではありません。不変オブジェクトを使用する場合は、設定された値だけを変更して新しいインスタンスを作成するセッターを追加できます。 –

+0

私はこの不変クラスを重大な思考なしに変更可能なクラスに分解しません。もしそれがすでに使用されていれば、それが不変であるという前提がすでに確立されている可能性があります。 –

答えて

0

あなたが指定した例では、オブジェクトに設定する多くのプライベート変数があり、これらはすべて最終的なものです。この状況ではビルダーパターンを使用するのが理想的です。 setterは、この場合はあまり役に立ちません。なぜなら、そのオブジェクト変数はすべて最終的なものなので、一度しか使用されないからです。

あなたの 'id'変数を非最終にしないでください。私はあなたのオブジェクトが存在することができ、その存続期間全体にわたってただ1つの一定の 'id'値しか持たないと仮定しています。これはまさに「最終的なもの」が作られたものです。それを非最終的なものにすることは、「最終的な」目的が完全に崩れていることを完全に打ち消します。

したがって、 'id'変数は 'final'にしてください。あなたのスイッチのケースでは、任意のid値を取得して変数に入れ、ビルダーを使用してTeamオブジェクトを構築するときは、そのid変数をスイッチケース外で使用します。

これは明らかです。

0

最初のインスタンスでは、Java Beanクラスのように見えます(クラスに存在しないデフォルトのコンストラクタを持つgetterおよびsetterを持つよりも、必要なものはすべて必要です。すべてのパラメータを渡したいコンストラクタで)。また、将来、let 4-5変数を追加したい場合は、コンストラクタを修正する必要があるため、回避することができるコードが破損します。

第2に、変数にfinalを追加し、変更可能なクラスを作成する方向に設定者を削除します。その場合は、クラスをfinalにする必要があります。

コンストラクタで非常に多くのパラメータを持つ面がある場合は、ビルダーパターンを持つことを検討してください。

また、idにはsetterプロパティを許可しないでください。代わりに、新しいId値で新しいインスタンスを作成します。 これはmutabilityがどのように機能し、新しいバグを避けるのに良いのでしょうか。

1

ビルダーパターンは、オブジェクトの(単一の)属性を変更する場合に使用するものではありません。

Builderパターンは オブジェクト段階的に構築し、実際 最終オブジェクトを返すメソッドを提供する方法を提供することにより、任意 パラメータと不整合な状態の多数の問題を解決します。

あなただけsetterを使用して、既存のクラスの単一の属性を更新したいsource: JournalDevはそれは、彼らが実際に、のためにあるものだ、完全に罰金です。

アプリケーションのコンテキストを知らなくても、オブジェクトのIDを変更することが理にかなっているかどうかを評価することは難しいです。新しいIDを持つ新しいオブジェクトを作成することもオプションです。

関連する問題