私は、設計に影響を与える非常に単純な問題に取り組んでいます。
あいまいな言葉で状況を説明しますが、ご容赦ください。私はエンティティを持っています、それを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();
}
したがって、同様の状況に遭遇する可能性があることを念頭に置いて、「奇妙な」ハードコードされた値の条件付きロジックを抽象化するための良い方法は何でしょうか。