创建嵌套对象的最佳实践

问题描述 投票:0回答:2

当我必须使用嵌套对象结构时,我总是有同样的问题。一个例子:

class Criteria {
  filters: Filter[];
}
class Filter {
  field: string;
  operator: Operator;
  value: string;
}
class Operator {
  operator: '=' | '!=';
}

我尝试在这种情况下的返回方法中应用德米特定律,但是使用该结构创建步骤的最佳实践是什么?

  • 从客户端创建所有对象
class Client {
  constructor() {
    const criteria = new Criteria([new Filter('field1', new Operator('='), 'value1')]);
  }
}
  • 从根对象(条件)创建所有对象,仅将基元从客户端传递到根类。
class Client {
  constructor() {
    const criteria = new Criteria([{field: 'field1', operator: '=', 'value': 'value1'}]);
  }
}
javascript object design-patterns architecture design-principles
2个回答
1
投票

这取决于对象的用途,因此您可能会在良好的代码中看到两种模式——您的示例剥离了表明一种模式与另一种模式的所有内容。

我认为在好的代码中,第一种模式——客户端创建对象——会更受欢迎。这是因为这些对象将是“注入依赖项”,并且遵循 SOLID 原则,“实现”不应该依赖于所有不同类型的过滤器。如果情况并非如此,那你为什么还要开设Criteria课程呢?

    
第一个问题是:嵌套类是 API 的一部分,还是供内部使用?


0
投票

这样想:您将 API 划分为概念(条件、过滤器、运算符),并且您的用户已经需要熟悉这些概念以及它们如何映射到类。在这些条件下,让他们自己创建嵌套类可以提供最大的灵活性。

要求它们提供原始值并让您为它们构造这些嵌套对象会限制灵活性,并且可能有必要设置这样的限制 - 如果您有理由这样做。


© www.soinside.com 2019 - 2024. All rights reserved.