Java 如果没有反射,就可以确定要运行的类

Java 如果没有反射,就可以确定要运行的类,java,database,oop,solid-principles,Java,Database,Oop,Solid Principles,因此,我希望有一个包含要运行的类的对象数据库。它看起来像: id | Description | pricingClass 1 | "static pricing" | staticDeliveryPrice.class 2 | "Dynamic pricing" | dynamicDeliveryPrice.class 这样做的目的是允许我的编码具有灵活性。我的思路是,这将允许多种方法来确定如何计算deliveryMethod的价格 我担心的问题是,在这个场景中使用反

因此,我希望有一个包含要运行的类的对象数据库。它看起来像:

id  | Description       | pricingClass
1   | "static pricing"  | staticDeliveryPrice.class
2   | "Dynamic pricing" | dynamicDeliveryPrice.class
这样做的目的是允许我的编码具有灵活性。我的思路是,这将允许多种方法来确定如何计算deliveryMethod的价格


我担心的问题是,在这个场景中使用反射是否不好?有更好的方法吗?它是否遵循了坚实的原则。(我会说是的,但我有一部分不同意)。

您描述的是基于插件的体系结构。你真的需要这种灵活性吗?通常在以下情况下需要:

  • 外部人员您的项目需要在无需您干预的情况下向代码中添加新功能
  • 您希望允许运行时修改程序
否则,这完全是矫枉过正。您可以完全控制产品中的内容,因此您可以简单地依靠良好的多态性来隔离功能的不同实现


此外,将业务逻辑放入数据库不是一件很好的事情:您混合了关注点,创建了强耦合(突然重命名类会变得很烦人!),当然,仅仅通过查看代码就很难推断代码中发生了什么。

为什么不创建一个基本的DeliveryPrice类,并让DynamicDeliveryPrice和StaticDeliveryPrice类扩展它以实现它们自己的交付方法呢。然后,您所需要的就是一个包含DeliveryPrice对象的数据结构,您可以对这些对象调用相同的方法。为什么要把所有的对象类型映射到一个字符串/类?反射还不错。如果需要,可以使用它。@RAZ_Muh_Taz我确实计划让我所有的deliveryClass使用一个接口来预定义方法。但是我是否仍然需要我的price对象来确定它使用的deliveryPrice?谢谢您的反馈。我很高兴你写了为什么它是必要的,因为它确实验证了我正在尝试做的事情。在我的用户场景中,我希望能够在运行时更改交付方法,并允许其他“客户”指定确切的成本以及程序与产品的交互方式。