标签: software-design

构造函数最佳实践

假设我们有一个只有1个函数的类,例如:compute DFS.以下哪项是首选方法,为什么?

Approach 1:

public class DFS {

    public DFS(Graph g) {
      dfs(g);  // <--- computation invoked from constructor.
    }

    private void DFS(Graph g) {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);


Approach 2:
public class DFS {
    Graph g;
    public DFS(Graph g) {
       this.g = g
    }

    private void doDFS() {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);
dfs.doDFS();
Run Code Online (Sandbox Code Playgroud)

java software-design

3
推荐指数
2
解决办法
4377
查看次数

抽象和分解有什么区别?

在软件工程中,设计阶段有两个主要概念abstraction,decomposition但我无法得到它们之间的差异?

uml modeling abstraction software-design

3
推荐指数
1
解决办法
6309
查看次数

为什么Observer设计模式通常被描述为一对多?

虽然研究Observer pattern我注意到,该之间的连接SubjectObserver通常是一对多的.为什么这样?为什么多对多关系可能导致任何问题?

oop design-patterns software-design observer-pattern

3
推荐指数
1
解决办法
1068
查看次数

类图是否总是需要属性?

所以,我明白一个类可以有属性和方法。

1)如果一个类有一个方法但没有属性,这可能吗?(这似乎不可能,在我看来它违背了创建类的目的)

2)如果一个类有属性但没有方法,这可能吗?(这似乎是可能的)

非常感谢!

uml class-diagram software-design

3
推荐指数
1
解决办法
5958
查看次数

为什么Swing组件有.getParent()方法,是否违反了面向对象的原则?

我正在研究面向对象的设计原则和启发式方法.
在这本名为"面向对象设计启发式"的着名书籍中,Arthur J. Riel(1996)看到了这种启发式:

启发式4.13:一个类必须知道它包含什么,但它永远不应该知道谁包含它.基于J.Reil,主要原因是可重用性.

但是在Swing Structure中,我们可以直接访问Parent对象的引用.

例如: label.getParent()

所以我的问题是:
为什么swing组件有.getParent()方法?现有的这种方法有
哪些面向对象的原理启发式方法?

java oop swing software-design object-oriented-analysis

3
推荐指数
1
解决办法
98
查看次数

什么是多租户及其实现方法?

我一直在阅读有关多租户的文章。像下面这样的非常琐碎的陈述。我已经阅读了数十个链接和网站,但都非常抽象。

..其中单个软件实例在服务器上运行并为多个租户提供服务。

我很容易从 30000 英尺以上理解它,但我无法理解它的实现方式。

如果有人可以通过单个堆栈(只是技术)和一个示例(可能是 Salesforce)帮助我理解我如何实现它,我会更满意,因为我几乎几天就迫不及待地想知道它了。

请不要张贴维基百科或任何网站的链接。我已经阅读了其中的大部分内容,但狩猎仍在继续!

我知道这是一个非常微不足道的问题,但请不要因为很少有充分理由而拒绝投票,因为您可能会从这个问题中读到一些新答案!

architecture cloud saas software-design multi-tenant

3
推荐指数
1
解决办法
828
查看次数

在 C++ 中清理脏标志的巧妙方法

在这种情况下,我试图公开空间搜索结构的标准 API,其中构建结构的各种方法的输入数据是相同的,但构建搜索结构的方式不同。我有基类上的数据设置器和派生类需要实现的纯虚拟 Build() 方法来构造搜索结构。下面是我的基类的样子

class SpatialSearch
{
public:
  void SetData(Data data_)
  {
    this->data = data_;
    this->dirty = true;
  }

  virtual void Build() = 0;

  int search(Vec3 point)
  { 
    if(dirty)
      Build();
    // Code to perform a search. I won't get into the 
    // nitty gritty of this, but this exists as a commom
    // implementation on the base class for all the spatial 
    // search structures.
  }

private : 
  Data data;
  bool dirty;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您注意到,每次搜索调用都会检查该dirty标志。如果上次之后数据已更改,我会重建结构。但是,Build 方法是在派生类上实现的,我需要一种方法来强制执行false在执行 Build …

c++ design-patterns software-design

3
推荐指数
1
解决办法
653
查看次数

Azure DevOps:发布版本

我将在 Azure DevOps 中创建我的 CI/CD 管道,但我在发布版本号方面遇到问题。使用此 CI/CD 创建了 dotnet 应用程序构建和 docker 映像,因此我希望 docker 映像版本号与:V1.2.0 和 ..... 相同,但目前我有编号,例如:10, 11, .. . 或者只有最新的标签!有人可以支持我拥有自己的发布版本号吗?谢谢

software-design azure devops azure-devops

3
推荐指数
1
解决办法
5027
查看次数

Rust 通用值内存存储实现

我正在为对象存储开发一个 API,并且正在努力寻找一种在 Rust 中实现它的方法。这有点令人沮丧,因为我很清楚如何在 C++ 中做到这一点,所以也许这个设计从根本上不适合 Rust,但我希望这里的人们能够提供一些有用的见解。

我希望能够执行以下操作:

// This is clone & copy
struct Id<Identifiable> {
  // What I think would be needed to get this entire system 
  // to work, but it is not fixed like this so alternate 
  // ideas are welcome.
  raw_id: usize,
  _marker: PhantomData<Identifiable>,
}

struct Store {
  // ... don't know how to implement this
}

trait Object {
  // ... some behavior
}

struct ObjectA {}
impl Object for ObjectA {}

struct ObjectB …
Run Code Online (Sandbox Code Playgroud)

software-design rust

3
推荐指数
1
解决办法
307
查看次数

在谈到MEF时,我们应该理解什么

我已经研究了MEF(托管可扩展性框架)两天了.但是,我认为MEF不能给我我的期望.

我想要一个软件设计:将有核心应用程序,应用程序的所有模块将作为插件完成.例如,在电子商务应用程序订单模块中,广告系列模块等都应该作为插件添加.

问题是:我可以在Asp.NET webform上使用MEF进行这样的设计吗?

asp.net plugins webforms mef software-design

2
推荐指数
1
解决办法
210
查看次数