2012-01-24 1 views
2

私はかなり単純な問題に取り組んでいます。"奇妙な"ハードコードされた値の条件付きロジックを抽象化する良い方法はありますか?

私は漠然とした言葉で状況を説明していますが、私に同行してください。 私は実体を持って、エンティティAそれを呼び出す:

EntityA{ 
    attr1 : type1; 
    attr2 : type2; 
    . . . 
} 

このエンティティは、データベース内に格納されており、すべてが素晴らしい働いています。

新しい要件として、監査属性をEntityAに追加する必要があります。今、私が持っている:データベースに新しい列を追加する場合

EntityA{ 
    . . . 
    whenCreated : Date (not null); 
    whoCreated : User (not null); 
    whenLastUpdated : Date; 
    whoLastUpdated : User; 
} 

、私は、デフォルト値を割り当てる: whoCreated =システム whenCreated = 24-JAN-2012。

変換/デフォルト値がある場合は、画面に「作成」属性が表示されないという要件があります。

私は表示レイヤーでこれをテストするロジックを配置する必要があることを知っています。しかし、条件付きロジックを明示的に配置すると面白いようです。例えば、これに代えて

if((entA.whenCreated != '24-Jan-2012') 
     && (entA.whoCreated != 'System')){ 
    showCreationAudit(); 
} 

私はこのような何かやるべきだと思う。私はそうあるもの、似たような状況に遭遇することを念頭に置いて、だから、

if(shouldDisplayCreationAudit(entA)){ 
    showCreationAudit(); 
} 

を「奇妙な」ハードコードされた値の条件付きロジックを抽象化する良い方法ですか?

答えて

2

私はあなたに「モデルオブジェクトのリストがあり、デフォルト値があり、表示されないものもあります。

私はビューのレイヤーはと正確にはだと思います。

モデルオブジェクトはデータを保持するだけで、データを操作するためのいくつかのメソッドがあります。データの表示方法を決定するのはビューの仕事です。

+0

はい、あなたの言っていることに同意します。しかし、私が本当に求めているのは、データが慣習的でないときに、それらの「表示/表示しない」質問をどのように抽象化するのかです。 – jharig23

1

プレゼンテーションレイヤーにすべてを送信し、レンダリングする天気を決定するのではなく、ビジネス層のデータをフィルタリングすることをお勧めします。お役に立てれば。

+0

私はフィルタリングと関係があるとの質問を読んでいません.... – hvgotcodes

+0

それをフィルタリングするのはビューレイヤの仕事です。ビジネス層は、ビジネスロジックを実行し、適用可能な場合は作業単位を適用するためのものです。 –

+0

@hvgotcodesデータレイヤでは、表示するフィールドをフィルタリングできます。それは私が100列のテーブルを持っているようですが、私は表示するために5つだけ必要です。このような場合は、テーブルから100列を選択してオブジェクトを移入し、表示するレイヤーに送信して、5だけを表示します。したがって、すべてがあなたのアドレッシングに関係します。 – user47900

関連する問題