相关疑难解决方法(0)

框架和库有什么区别?

框架库有什么区别?

我一直认为库是一组对象和函数,专注于解决特定问题或应用程序开发的特定领域(即数据库访问); 另一方面,框架是一个以特定方法(即MVC)为中心的图书馆集合,涵盖了应用程序开发的所有领域.

frameworks terminology libraries

847
推荐指数
20
解决办法
29万
查看次数

控制反转与依赖注入

根据Martin Fowler撰写论文,控制反转是程序控制流程被颠倒的原则:代替程序员控制程序流程,外部源(框架,服务,其他组件)控制它.这就像我们把东西塞进别的东西.他提到了一个关于EJB 2.0的例子:

例如,会话Bean接口定义ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复).你无法控制何时调用这些方法,只是它们的作用.容器打电话给我们,我们不打电话给它.

这导致框架和库之间的区别:

控制反转是使框架与库不同的关键部分.库本质上是一组可以调用的函数,这些日子通常组织成类.每个调用都会执行一些操作并将控制权返回给客户端.

我认为,DI是IOC的观点,意味着对象的依赖性被颠倒了:相反,它控制着自己的依赖关系,生命周期......还有其他东西为你做.但是,正如你用手告诉我的DI,DI不一定是IOC.我们仍然可以有DI而没有IOC.

然而,在本文中(来自pococapsule,另一个IOC C/C++框架),它表明,由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件中因此不能成为普通的旧Java/C++对象(PO​​JO/POCO).

除依赖注入模式之外的控制容器的反转(存档链接)

附加阅读以了解旧的基于组件的开发框架的问题是什么,这导致了上面的第二篇论文:为什么以及什么是控制反转(存档链接)

我的问题:IOC和DI究竟是什么?我很迷惑.基于pococapsule,IOC比仅仅反转对象或程序员和框架之间的控制更重要.

dependency-injection inversion-of-control

467
推荐指数
14
解决办法
26万
查看次数

抽象工厂模式与工厂方法的区别

我知道有很多关于这两种模式之间差异的帖子,但有一些我找不到的东西.

从我一直在阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是从客户端隐藏实现,因为他们将看到通用产品.我的第一个问题是抽象工厂.它的作用是允许您创建具体对象的族(可能取决于您使用的特定工厂)而不仅仅是单个具体对象?抽象工厂是否只返回一个非常大的对象或许多对象,具体取决于您调用的方法?

我的最后两个问题是关于我在很多地方看到过的单一引言,我无法完全理解:

两者之间的一个区别是,使用抽象工厂模式,类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化.

我的理解是工厂方法模式有一个Creator接口,它将使ConcreteCreator负责知道要实例化的ConcreteProduct.这是通过使用继承来处理对象实例化的意思吗?

现在关于那个引用,抽象工厂模式究竟是如何通过合成将对象实例化的责任委托给另一个对象?这是什么意思?看起来抽象工厂模式也使用继承来完成构建过程,但是我仍然在学习这些模式.

任何帮助,尤其是最后一个问题,将不胜感激.

design-patterns factory-method factory-pattern abstract-factory

420
推荐指数
8
解决办法
19万
查看次数

如何设计可扩展的软件(插件架构)?

我需要一些资源来讨论如何将软件设计为可扩展的,即让其他人可以编写添加功能的附加组件/插件.

您有什么推荐的吗?那里有讨论这个主题的书吗?
我更喜欢那些简短而重要的东西; 一点理论和一堆具体的例子.

我不是针对特定语言,我希望能够理解核心思想,以便我可以用任何语言实现它.

出于同样的原因,我宁愿不使用其他人构建的框架(除非框架不是非常高级,即不会隐藏太多),目前我只想教育自己主题和实验以各种方式实现它.此外,框架通常假定用户对该主题的了解.

UPDATE

我不是在询问OOP或者是否允许我的类被继承.我所说的是设计一个将部署在系统上的应用程序,以便在部署之后可以通过第三方附加组件进行扩展.

例如,Notepad ++有一个插件架构,您可以将.dll文件放在plugins文件夹中,并为不存在的应用程序添加功能,例如颜色选择或片段插入,或许多其他内容(广泛的功能).

language-agnostic resources plugins extensibility

72
推荐指数
3
解决办法
3万
查看次数

如何将SOLID原则实现到现有项目中

我为这个问题的主观性而道歉,但我有点卡住了,我希望以前能够处理这个问题的人提供一些指导和建议:

我有(成为什么)一个用C#2.0编写的非常大的RESTful API项目,我的一些类变得非常可怕.我的主要API类就是一个例子 - 有几十个成员和方法(可能接近数百个).你可以想象,它变成了一个小噩梦,不仅仅是维护这段代码,甚至只是导航代码已经成为一件苦差事.

我是SOLID原则的新手,我是设计模式的忠实粉丝(但我仍处于可以实现它们的那个阶段,但还不足以知道何时使用它们 - 在不太明显的情况下) .

我需要打破我的班级规模,但我不知道如何最好地去做.我的StackOverflower伙伴能否建议他们采用现有的代码单块并将其缩小到适当大小?

c# design-patterns solid-principles

18
推荐指数
1
解决办法
4161
查看次数

DIP vs. DI与IoC

大概2个月我一直在阅读这三个主题我能找到的所有东西,我还不确定我是否已经找到了.

  1. 依赖倒置原则.意味着你应该始终只依赖于接口而不是它们的实现.如果你的班级依赖于任何其他班级,这是不好的,因为它取决于第二类的细节.如果你的类依赖于接口,这绝对可以,因为这种依赖只意味着你的类需要一些抽象的东西,它可以做一些具体的事情而你并不真正关心它的做法.

    由于"DIP"中的P代表"原理",我应该用这种方式定义:依赖性倒置原则是一个原则,要求所有代码的实体仅依赖于他们真正需要的细节.

    通过"他们真正需要的细节",我指的是最简单的情况下的接口.我还使用"实体"这个词来强调DIP也适用于程序和其他任何东西,不仅适用于类.

  2. 依赖注入.它仅适用于启用DI的实体.启用DI的实体是一个"开放"的实体,用于配置其行为而不更改其内部.注入有两种基本类型(在谈论类时):

    • 构造函数注入 - 当您将所有必需的"抽象细节"传递给对象时,就在它即将构建的那一刻.
    • Setter Injection - 在您创建对象后"澄清"所需方面.

    因此,定义可能如下:依赖注入是将"抽象细节"传递给真正需要这些细节的实体的过程.

    通过"真正需要这些细节",我指的是最简单的情况下的接口."实体"一词一如既往地用来强调DI也适用于程序和其他任何东西.

  3. 控制反转.它通常被定义为"库和框架之间的差异","以程序编程中的任何一种方式编写程序"等等.这对我来说是最令人困惑的事情.我认为这里的主要想法只是启动任何行动.要么"随时随地"(程序方式)做某事,要么"等"直到有人问你(IoC方式).

    我的定义是:IoC是程序执行流程的一个属性,当你不要做任何事情,直到他们要求你这样做.

    这听起来就像"好莱坞原则",但我相信"好莱坞原则"和IoC都是完全相同的想法.

我理解吗?

architecture theory dependency-injection inversion-of-control

16
推荐指数
1
解决办法
6292
查看次数

处理循环依赖

我想知道是否有人可以建议任何好的方法来打破Java中2个类之间的循环依赖.FindBugs建议使用接口,所以我想知道是否有人对这类问题有任何良好的经验.

java circular-dependency

9
推荐指数
2
解决办法
2万
查看次数

"依赖倒置"和"接口设计"是否遵循相同的原则?

"依赖倒置原则"(DIP)和"设计到接口原理"是否表达了相同的原则?如果没有,那会有什么区别?

编辑

稍微澄清和缩小上下文:通过接口我的意思是编程接口,如Java interface或C++中的纯抽象基类.不涉及其他"合同".

oop dependency-inversion

7
推荐指数
1
解决办法
1085
查看次数

静态类或实例指针

背景故事:

目前我有一系列与游戏相关的三个课程.我以前使用Unity制作游戏,您可以使用所有代码都可访问的功能访问相机等组件.但是,我当前的设置依赖于跨越其他类发送的每个类的实例.请参阅以下内容:

class World{

};
class Game{
     Camera* camera;
     World* world;
};
class Camera{
     Game* game;
     World* world;
};
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这是设计糟糕的结果还是有时这样的设置是合理的?

  • 我是否应该在当前设置中使用静态类,因为它会澄清代码并且每个类的实例只使用一次?

  • 在实例上使用静态类有哪些可能的缺点?

编辑:为什么他们需要互相访问.

为什么相机需要世界:相机需要访问世界,因为世界需要从相机的角度进行渲染.相机会根据所看到的内容触发世界渲染.渲染是通过相机中的各种方法触发的,例如移动时.

当绘制相机时,它会绘制它所看到的内容,例如世界.为了绘制世界,相机需要进入世界.

为什么相机需要游戏:游戏具有诸如FPS之类的值,相机使用它来显示调试信息的叠加.

c++ oop static class c++11

5
推荐指数
1
解决办法
131
查看次数

取决于抽象.不要依赖具体的课程

当我正在阅读工厂时,首先设计图案书上的抽象工厂设计模式.它提到了这句话.

你能给出一个基本的例子和解释来澄清它.

java oop design-patterns

4
推荐指数
1
解决办法
3072
查看次数