需要太多派生 类 时的设计问题

design issue when too many derived classes are needed

我正在尝试在我的实体框架代码优先应用程序中构建一个类似于 Whosebug 的徽章系统。

我总共会有大约10个徽章,每种徽章都有自己的属性。我正在考虑使用基数 class Badge 并从基数 class 派生其他 classes。

例如,会有Sprinkle徽章,如果他的post被点赞3次或以上,它会自动分配给用户。所以,我会有 Sprinkle class 和额外的 属性 NumberOfLikes (以便以后可以更新)。但是,在数据库 table 中,此 class 只有一条记录。这不奇怪吗?

我将有 10 个这样的 class,它们对应的 table 在数据库中只有一条记录。我必须为每个配置单独的 classes 才能配置其独特的属性。

我的设计选择不好吗?

在您的示例中,您可以在数据库中存储用户、他的 post 和点赞数。 Sprinkle 徽章可能是某些业务规则的结果(您的 post(或用户)Sprinkle 是否兼容)并且可能未存储在您的数据库中?

在其他世界,Sprinkle 徽章是一种查看 post(或用户)超过 3 个赞的方式?

也许可以将此规则存储在您的数据库中并进行参数化?

您可以考虑区分徽章的业务规则,即在派生徽章中编码 class 和用户获得的徽章的簿记。我认为没有必要将此规则 classes 设为 entity framework classes 并将它们存储在数据库中,如果它没有任何您想要经常更改的参数的话。您可以将此参数存储在其他配置存储中(例如 exe.config)或类似的或硬编码的。此 classes 的(可能只有一个)实例纯粹是为了执行业务规则。将它们视为服务 (DDD) 或策略模式或(用于评估)访问者模式。它们可以在数据库中没有 storing/loading 的情况下创建(也许每个 IoC/Di 自动创建所有派生的容器)。 另一方面,您必须记录哪个用户获得了哪个徽章(根据每个请求计算这个新徽章可能会影响性能)。在这里,将 class 存储在数据库 (1:n) 中并存储用户收到的徽章列表是有意义的。因此,在每次更改(新的 post、新的类似的等等)或不时(每晚 运行)之后,您 运行 通过您的徽章规则 classes 和每个徽章为该用户执行用户尚未拥有的(或者如果有可能丢失您全部拿走的批次)以检查它是否适用。如果是,则创建用户获得徽章的标记。