这是反模式吗?如果是这样的话?如果不是为什么不呢?

时间:2012-05-28 19:43:38

标签: oop design-patterns anti-patterns

我正在研究一些我们正在创建对象模型的代码,但模型具有通用密钥。例如

class myContact {
 var key;
 var value;
}

然后在代码中将它们实例化如下

myContact = new myContact()
myContact.key = 'address'
myContact.value = '123 my address'

myContact2 = new myContact()
myContact2.key = 'secondAddress'
myContact2.value = '123 my other address'

然后将它们附加到父对象,如

myBank = new company();
myBank.addContact(myContact);
myBank.addContact(myContact2);

对我而言,由于模型的定义过于宽泛,因此感觉不对。但是你从类名中知道它将是某种联系信息。

与此同时,我可以看到为什么这可能有用,好像我们希望在将来添加不同类型的联系方式时,这种方法很容易实现。

如果这是一个好习惯,有人可以向我解释一下吗?不好的做法和原因?

我最初的想法:

良好做法

  • 将来可轻松扩展联系人类型。
  • 轻松浏览myBank的联系信息并获取数据。

不良做法

  • 如果要更新特定联系人类型,则必须循环 通过找到正确的钥匙。
  • 我从来没有写过像这样的代码,这就是为什么它感觉不好做法 即使它完全可以接受。
  • 贫血模型,没有必要成为一个阶级。
  • 没有已定义的密钥,因此我们无法轻松删除或添加联系人,而无需再次搜索所有密钥。
  • 没有关于联系人或应该是什么的定义。

任何想法都会非常感激。

编辑:在我一个人的时候添加更多的想法

2 个答案:

答案 0 :(得分:0)

在我看来,“自定义字段”并没有什么不好。它在所有允许用户定义自己的字段(例如jira,电话簿等)的系统中相当流行。通常存在一些基本的,预定义的字段/密钥,例如姓名,id,电子邮件等,它们例如被使用。用于搜索或验证。在这段代码中我唯一不喜欢的是贫血模型。如果你创建一个类myClass(更改该名称!),然后公开访问其所有字段,那么为什么需要一个类? class是关于封装的。

答案 1 :(得分:0)

  

对我而言,由于模型的定义过于宽泛,因此感觉不对。

“医生,我这样做会很痛” - “那就不要那样做了。”

需要一个松散的模型来表示它吗?然后去吧。如果没有,如果您认为这只是一种负担,请选择更简单的解决方案。

显然,目前没有必要。将来有什么机会出现这种需求?这样的重构将如何影响您的代码库?你甚至可以对此作出假设吗?

在这种情况下,在这种情况下应用YAGNI原则可能是有意义的。

相关问题