design-patterns - 使用敏捷方法或其他方式编写松散耦合代码的建议

标签 design-patterns oop agile decoupling

我最近一直在非常认真地阅读罗伯特·C·马丁(又名鲍勃叔叔)的书籍。我发现他谈论的很多东西对我来说都是真正的救星(小函数大小,非常具有描述性的名称,等等)。

我还没有解决的一个问题是代码耦合。我不断遇到的一个问题是我将创建一个对象,例如包装数组的对象。我确实会在一个类(class)中进行一些工作,但随后必须调用另一个类(class)在另一个类(class)中进行一些工作。到了我将相同数据传递 3-4 层深度的程度,这似乎没有意义,因为很难跟踪该对象传递的所有位置,所以当需要更改它时我有很多依赖。这看起来根本不是一个好的做法。

我想知道是否有人知道更好的方法来处理这个问题,鲍勃的建议(尽管可能是我误解了)似乎让事情变得更糟,因为它让我创建了更多的类。提前致谢。

编辑:按请求提供一个现实世界的示例(是的,我完全同意,否则很难理解):

class ChartProgram () {
int lastItems [];

  void main () {
  lastItems = getLast10ItemsSold();
  Chart myChart = new Chart(lastItems);
  }
}
class Chart () {
  int lastItems[];
  Chart(int lastItems[]) {
  this.lastItems = lastItems;
  ChartCalulations cc = new ChartCalculations(this.lastItems);
  this.lastItems = cc.getAverage();
}
class ChartCalculations {
  int lastItems[];
  ChartCalculations (int lastItems[]){
  this.lastItems = lastItems;
  // Okay so at this point I have had to forward this value 3 times and this is 
  // a simple example. It just seems to make the code very brittle
  }
  getAverage() {
  // do stuff here
  }

}

最佳答案

查看示例代码,您的 Chart 类与 ChartCalculation 类紧密耦合(它正在实例化它的一个新实例)。如果 Chart 类通过接口(interface)(我的示例代码中的 IChartCalculation)使用 ChartCalculation,则可以删除这种耦合。 Chart 类使用的 IChartCalculation 的具体实现可以通过其构造函数 ( dependency injection ) 传递给 Chart 类,也许可以通过 factory class 传递给 Chart 类。 。另一种方法可能是使用 IOC框架(尽管这通常可能会带来不必要的复杂性)。通过这种方式,Chart 类可以使用 IChartCalculation 的不同具体实现,并且只要它们被编码为/实现接口(interface),它们就可以独立变化。

class ChartProgram () 
{
    int lastItems [];

    void main () {
    lastItems = getLast10ItemsSold();
    Chart myChart = new Chart(lastItems, new ChartCalculations());
}

class Chart
{
    int[] lastItems;

    IChartCalculation chartCalculations;

    public Chart(int[] lastItems, IChartCalculations cc)
    {
        this.lastItems = lastItems;
        chartCalculations = cc;
        int average = cc.GetAverage(lastItems);
    }
}

interface IChartCalculation
{
    int GetAverage(int[] lastItems);
}


class ChartCalculation : IChartCalculation
{
    public int GetAverage(int[] lastItems)
    {
        // do stuff here
    }
}

关于design-patterns - 使用敏捷方法或其他方式编写松散耦合代码的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788267/

相关文章:

javascript - Breeze 是否消除了单页应用程序中对 DTO 的需求?

c# - 通用单例<T>

java - Android 中的函数重用

php - 在开始一个新项目时,值得花些时间在前面的事情[已结束]

tfs - 与 Team Foundation 中的功能和待办事项相关的 Epics 是什么?

video - 敏捷开发 101 视频

c# - 添加日志记录的更好方法或需要在每个函数中出现的方法?

c# - Switch 语句的替代方法

ios - 模型操作属于应用程序设计模式的什么地方?

java - 使用对帐户可行的 getter 和 setter 函数?