【发布时间】:2014-06-26 10:43:13
【问题描述】:
我有一个关于得墨忒耳定律与 Java 中其他对象中包含的列表相关的问题。我有以下课程。
public class Conversation
{
Person person;
List<Message> conversationList;
public List<Message> getConversationList()
{
return conversationList;
}
}
要向此类中的 conversationList 添加新的 Message 对象,我通常会执行以下操作。
Conversationc = new Conversation();
c.getConversationList().add(new Message());
经过一番阅读,这似乎违反了得墨忒耳法则,并向 Converstaion 添加如下方法,这将是解决此问题的“更好”方法。
public List<Message> addMessageToList(Message msg)
{
conversationList.add(msg);
}
但是,这对我来说似乎完全是矫枉过正。在这种情况下,最佳做法是什么?
【问题讨论】:
-
我会使用第二种方法。签名应为
public void addMessage(Message msg)。 -
第二个提供了更好的抽象性和可读性(你应该认真考虑@LutzHorn 的建议......这是你作为使用 OO 语言的程序员想要的。
-
@TheLostMind 是的,即使只是使用模块化语言 :-)
-
另外,如果您担心好的做法:您的消息列表被命名为会话列表,并且该类拼写错误两次,这看起来就像在实际代码中一样。
-
一个额外的词(对于已经很好的 cmets 和答案):考虑设计!您希望进行包含消息的对话。使用列表的公共 getter,您设计了一个对话,其中包含一个由消息组成的列表。看出区别了吗?
标签: java list law-of-demeter