gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:01:20 25 4
gpt4 key购买 nike

最近,我一直在非常认真地阅读 Robert C. Martin(又名 Bob 叔叔)的书。我发现他谈到的很多东西对我来说都是现实生活中的救星(小函数大小,非常描述性的事物名称等)。

我还没有解决的一个问题是代码耦合。我一遍又一遍地遇到的一个问题是我将创建一个对象,例如包装数组的东西。我确实会在一个类做一些工作,但随后必须调用另一个类在另一个类做。到了我将相同的数据传递 3-4 层深度的地步,这似乎没有意义,因为很难跟踪该对象正在传递的所有地方,所以当是时候改变它了我有很多依赖项。这似乎不是一个好习惯。

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

编辑:通过请求一个真实世界的例子(是的,我完全同意这很难理解):

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 .另一种方法可能是使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com