我对设计模式有一个非常愚蠢的问题:让我们说我们有两个类Post
和Product
,对于每个类我们在DB中有不同的表,它们什么都没有彼此共同,所以我们不能为它们创建基类。有些Posts
甚至包含 Products
。以下是我们应该对他们做些什么:
Post
和Product
个实例,当用户从下一个项目请求新闻提要时,将它们打包到一个数组中(使用C ++,如果重要),将其发送到客户端,并在客户端接收和解包(使用Java)。Post
和Product
(例如Facebook上的新闻Feed)。Post
或Product
。因此,我们可以发送Post
或Product
作为邮件的附件(因此,我们应该在列Post
中存储已发送Product
或attached_item
的ID服务器端DB中的messages
表。)那么,这里最好的设计模式是什么?我应该如何实施Post
和Product
类?
答案 0 :(得分:1)
我认为解决方案可能比您想象的更简单。为什么不使用类似于laravel version 5.3
的通用接口并隐藏实现细节?
只需使用您需要的方法实现通用接口即可。假设这个通用接口称为Java
:
EntityInterface
然后,当您想要处理这些类时,将它们视为public class Post implements EntityInterface {};
public class Product implements EntityInterface {};
对象:
EntityInterface
这些代码片段位于EntityInterface myNewPost = new Post();
EntityInterface myNewProduct = new Product();
//Now you see myNewProduct and myNewPost as EntityInterface objects
中,但在Java
中使用虚拟函数并获得相同的效果。
答案 1 :(得分:1)
这是一个非常广泛的问题,但这里有你能做到的骨架,只是为了给你一些想法:
// An interface containing methods specific to objects you can list
interface Listable {}
// An interface containing methods specific to objects you can share
interface Shareable {}
// An interface containing methods specific to objects you can send
interface Sendable {}
class Post implements Listable, Shareable, Sendable {
List<Product> products;
}
class Product implements Listable, Shareable, Sendable {
}
class ListManager {
public void addToList(Listable element) { }
}
class ShareManager {
public void share(Shareable element) { }
}
class SendManager {
public void send(Sendable element) { }
}
然后,您可以通过这种方式互换使用Post
和Product
:
Post post = new Post();
Product product = new Product();
ListManager listManager = new ListManager();
listManager.addToList(post);
listManager.addToList(product);
ShareManager shareManager = new ShareManager();
shareManager.share(post);
shareManager.share(product);
SendManager sendManager = new SendManager();
sendManager.send(post);
sendManager.send(product);
关于数据库表示,如其评论中建议的fusiled
,只需将它们粘贴在2个单独的表中即可。使用两者之间的映射表将产品链接到他们的帖子。
修改强> 关于MESSAGES表的问题
您可以使用列messageId
,postId
,productId
添加新的映射表MESSAGE_ATTACHED_ITEM。仅在将项目附加到消息
或者另一种选择是使ATTACHED_ITEM表只有id。 并使Post和Product表具有此表Id的外键。 然后,您可以将此attachItemId粘贴到您的attached_item列
中