【问题标题】:What's a good way to abstract conditional logic for "weird" hard-coded values?为“奇怪的”硬编码值抽象条件逻辑的好方法是什么?
【发布时间】:2012-01-24 21:15:05
【问题描述】:

我正在解决一个非常简单的问题,涉及设计分支。

请耐心等待,我用模糊的语言描述情况。 我有一个实体,叫它EntityA:

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

此实体存储在数据库中,一切正常。

作为一项新要求,我需要向 EntityA 添加审计属性。现在我有:

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

将新列添加到数据库时,我分配了默认值: whoCreated = 系统 whenCreated = 2012 年 1 月 24 日。

要求的另一部分是我不在屏幕上显示“创建”属性,如果它们具有转换/默认值。

我知道我需要在显示层中放置逻辑来对此进行测试。尽管如此,将条件逻辑显式放在那里似乎有些有趣。

例如,而不是这个:

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

我想我应该这样做:

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

所以,请记住,我可能会遇到类似的情况,有什么好方法可以为“奇怪的”硬编码值抽象条件逻辑?

【问题讨论】:

    标签: java design-patterns data-conversion hardcoded


    【解决方案1】:

    我将您的问题解释为,“我有一个模型对象列表,有些有默认值,有些没有……我在哪里决定要显示什么?”

    我认为视图层正是您不想处理的地方。

    模型对象只保存数据,并在它们上具有一些用于操作数据的方法。视图的工作是确定如何显示数据。

    【讨论】:

    • 是的,我同意你所说的。但我真正想要的是,当数据非常规时,如何最好地抽象出那些“显示/不显示”的问题。
    【解决方案2】:

    在业务层过滤数据而不是将所有内容发送到表示层并决定是否渲染天气的好习惯。希望这会有所帮助。

    【讨论】:

    • 过滤它是视图层的工作。业务层用于执行业务逻辑和应用工作单元(如果适用)
    • @hvgotcodes 我的意思是,在数据层,你可以过滤你想要显示的字段。这就像我有 100 列的表,但我只需要 5 来显示。在这种情况下,我不会从表中选择 100 列并填充对象并将它们发送到视图层以仅显示 5。所以这完全取决于您正在处理的用例。
    • 我明白你的意思。它是解决要加载多少数据的有效点,但这不是 OP 所要求的(我认为)。
    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2011-06-03
    • 2020-09-06
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多