【问题标题】:different return type and signature in Strategy Pattern in Java [closed]Java中策略模式中的不同返回类型和签名[关闭]
【发布时间】:2019-08-23 11:14:58
【问题描述】:

在下面的案例中,我对使用策略模式有点困惑。

我有下面的 MyEntity 类。

public class MyEntity {

    private long id;
    private long userid;
    String firstname;
    String lastname;
// other fields

我有以下情况

  1. getMyEntity (long user_id) 接受 user_id 作为参数并从数据库返回具有相同 user_id 的 List。
  2. updateMyEntity (MyEntity myEntity ) 接受 MyEntity 作为参数并在数据库中更新此 MyEntity。
  3. deleteMyEntity (long id) 接受 ID 作为参数并在数据库中删除此 MyEntity。
  4. addMyEntity (MyEntity myEntity ) 接受 MyEntity 作为参数并将此 MyEntity 添加到数据库中。

具有上述要求的 Java 策略模式。如果方法具有相似的输入参数和相似的输出参数,我可以在 Java 中使用策略模式。但就我而言,我有不同的输入参数和不同的输出参数,所以我很困惑如何使用策略模式。
请指导我处理这个案例。

【问题讨论】:

  • 如果该模式不适合您的用例,那么为什么要使用它?
  • 如果一个模式似乎不适用于一个问题,你为什么认为你应该继续把那个众所周知的方形钉子钉进一个圆孔?
  • 伙计,我不建议对主键字段使用原始类型,如long,你应该使用Long而不是long
  • 请检查这个stackoverflow.com/questions/32062957/…如果你提到IDENTITY策略很有用,那么数据库可以自动分配下一个值
  • 我必须使用策略模式来满足这个要求。有没有办法让我可以使用它?

标签: java design-patterns strategy-pattern


【解决方案1】:

虽然答案只是与编程无关,但我认为这对专业程序员很重要。

策略模式是一种行为模式,即它用于改变程序(a 的某些部分)的行为方式。将 CRUD 方法定义为行为听起来非常非常违反直觉。您可以定义一个抽象行为并将每个 CRUD 操作实现为该行为的具体实例,但我不想想象这种解决方案所需的抽象级别。

既然你“必须使用策略模式”,你应该去和给你这个限制的人谈谈。请她/他解释在这种情况下如何使用策略模式。现在到了重要的部分:如果他无法解释为什么以及如何使用它,那么就不要使用它。并清楚地传达你不会使用它。甚至可以反驳这个论点。

您是专业人士。你工作的主要部分是说“不”,当“不”是有序的时候。如果在您要求澄清后与编程相关的事情对您来说似乎不合理,那么肯定是“不”。

【讨论】:

  • 我们可以使用任何不同的输入模式和不同的输出模式吗?除了策略模式。
  • 如果用例是从输入到输出本身的转换(即不是在调用期间发生的副作用),那么您可以将其称为转换器,尽管我不知道任何特定的模式这个。但是,如果副作用是主要用例(例如,在数据库中/从数据库中存储或更新某些内容时),我不会尝试“统一”这些用例。通过将所有内容统一在一个抽象的 T execute(U u)-method 下,您会失去意义。
【解决方案2】:

策略模式似乎不适用于您的情况。 您应该阅读有关金锤反图案的信息:https://exceptionnotfound.net/the-golden-hammer-anti-pattern-primers/

但如果你真的想应用它,你可以改变你的方法签名,这样你就可以只传递联系人参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2013-04-08
    • 1970-01-01
    • 2012-08-21
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多