2

私は、設計に影響を与える非常に単純な問題に取り組んでいます。

あいまいな言葉で状況を説明しますが、ご容赦ください。私はエンティティを持っています、それをEntityAと呼びます:

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

このエンティティはデータベース内に保存されており、すべてが正常に機能しています。

新しい要件として、EntityAに監査属性を追加する必要があります。今私が持っています:

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

データベースに新しい列を追加するとき、デフォルト値を割り当てます:whoCreated = System whenCreated=24-Jan-2012。

要件のもう1つの部分は、変換/デフォルト値がある場合、画面に「作成」属性を表示しないことです。

これをテストするためのロジックを表示レイヤーに配置する必要があることはわかっています。とはいえ、条件付きロジックを明示的に配置するのはおかしいようです。

たとえば、これの代わりに:

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

私はこのようなことをすべきだと思います:

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

したがって、同様の状況に遭遇する可能性があることを念頭に置いて、「奇妙な」ハードコードされた値の条件付きロジックを抽象化するための良い方法は何でしょうか。

4

2 に答える 2

2

私はあなたの質問を「モデルオブジェクトのリストがあり、デフォルト値があるものとないものがあります...何を表示するかをどこで決めるのですか?」と解釈しています。

ビューレイヤーは、まさにこれを処理したくない場所だと思います。

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

于 2012-01-24T21:21:27.203 に答える
1

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

于 2012-01-24T21:19:41.507 に答える