首页 \ 问答 \ 依赖倒置原则:试图理解(Dependency inversion principle: trying to understand)

依赖倒置原则:试图理解(Dependency inversion principle: trying to understand)

我正在学习设计模式及其周围的事物(特别是SOLID依赖性反转原理 ),看起来我正在失去一些东西:

遵循DIP规则,我应该能够通过不在类( 组合 )中创建对象,而是将对象引用/指针发送到类构造函数( 聚合 )来使类不那么脆弱。 但这意味着我必须在其他地方创建一个实例:因此,具有聚合的一个类越灵活,另一个类就越脆弱。

请解释一下我错在哪里。


I'm learning design patterns and things around it (like SOLID and Dependency inversion principle in particular) and it looks like I'm loosing something:

Following the DIP rule I should be able to make classes less fragile by not creating an object in the class (composition) but sending the object reference/pointer to the class constructor (aggregation). But this means that I have to make an instance somewhere else: so the more flexible one class with aggregation is, the more fragile the other.

Please explain me where am I wrong.


原文:https://stackoverflow.com/questions/28706226
更新时间:2023-03-09 19:03

最满意答案

我没有尝试过这个..但我认为这将是一个普通的Java进程调用。 如果B是exe。

    Runtime runTime = Runtime.getRuntime();
    Process process = runTime.exec("B");

I have not tried this..But i assume it would be a normal Java process invoking. If B is an exe.

    Runtime runTime = Runtime.getRuntime();
    Process process = runTime.exec("B");

相关问答

更多
  • eclipse RCP的安装[2022-02-06]

    用link法把eclipse for RCP目录中的plugins和features当做插件插到原开发环境中去,即可
  • rcp怎么用?[2021-06-11]

    1。入门 对于入门的RCP开发人员来讲,首先应当要对RCP有一个全局性的认识,reload_cn有一篇开源文档《RCP程序设计》,下载地址为:http://www.eclipseworld.org/bbs/read.php?tid=4457,这篇文档涵盖了RCP开发相关的许多知识点,是引导新手入门的好材料。 此外,对于RCP开发应用而言,最经典的书籍还当数《Eclipse Rich Client Platform: Designing, Coding, and Packaging Java™ Applica ...
  • 确保您发送CR-LF(“\ r \ n”):回车(0x0A),换行(0x0D) Make sure you are sending CR-LF ("\r\n"): carriage return (0x0A), line feed (0x0D) after your command
  • 我认为您不需要设置Java只是为了使用servlet。 我会使用AJAX和数据库。 我不知道ASP.NET,但我在这种情况下PHP类似,基本上也是“无状态”。 如果你想在两个不同的用户之间显示某种异步通信,比如来自两个不同的会话,而没有大量的刷新(比如聊天),你可以让AJAX页面不断轮询数据库以获取新消息,并在以后显示它们。他们进来了。您还可以使用AJAX插入新消息,为用户提供对此消息数据结构的读/写访问权限。 由于“其他”用户正在做同样的事情,用户A应该看到当用户B输入新消息时弹出新消息。 你是这个意思吗 ...
  • 我没有尝试过这个..但我认为这将是一个普通的Java进程调用。 如果B是exe。 Runtime runTime = Runtime.getRuntime(); Process process = runTime.exec("B"); I have not tried this..But i assume it would be a normal Java process invoking. If B is an exe. Runtime runTime = Runtime.get ...
  • 如果您正确处理/捕获异常,我不确定它会如何使您的应用程序崩溃。 关于例外,它应被视为一种例外状态 - 这不属于正常的行动流程。 例如。 FileNotFoundException是例外,因为你想打开文件,但它不存在。 你期望它在那里,但事实并非如此。 如果您搜索某种产品,那么您不希望它出现在“期望在杂货店找到一块面包”的一般意义上。 您搜索了一堆关键字,搜索结果为空响应/零匹配。 它在您的业务逻辑中并不例外。 另一方面,当您点击产品上的“订单”(例如在产品页面上), 然后找不到产品时,它就是“例外”。 你预 ...
  • TCP始终是双向的。 与UDP一样,没有“发送和忘记”。 第一个程序必须打开一个服务器套接字。 这意味着,它在端口25上侦听TCP SYN(一个标志,表示正在打开连接)。 如果您的第二个程序在端口25(从端口45000)连接,则该连接由4个值,主机IP,主机端口,远程主机IP,远程主机端口标识。 此时,在三次握手(SYN,SYN ACK,ACK)完成的情况下,第一个程序从返回的服务器套接字获取客户端套接字,该套接字连接到第二个程序。 所以,是的,一旦建立连接,它就是双向通信,你很容易受到攻击。 防火墙主要阻 ...
  • 实际上,运行JUnit插件测试并不昂贵。 您可以将启动配置配置为在无头模式下运行,因此唯一加载的是没有工作台的轻量级PDE。 当您使用例如Tycho运行无头构建时也会发生同样的情况。 Surefire默认启动您的测试包作为无头插件测试。 隔离单元测试的优势在于您可以访问插件的资源,最重要的是,使用依赖注入。 如果要模拟注入的对象,则必须运行插件测试,以便可以使用InjectorFactory。 这就是你如何模拟事件服务:IEventBroker是一个接口,所以你唯一需要做的就是为它编写一个模拟实现 publ ...
  • 除非你出于某种原因特别想避免使用WCF,否则我建议你去看看它。 具体来说,您可以使用NetNamedPipeBinding,它使用命名管道在同一台计算机上进行通信。 您可以在此处找到更多信息: http : //msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx 同样,这里有一个相当简洁的博客文章,展示了它的用途 (从WMP插件到第三方应用程序)。 根据您对应用程序的描述,您可以在第一个AppDomain ...
  • 不,单个管道仅支持单个客户端。 与Web服务器非常相似,它还为每个客户端创建多个连接。 管道服务器以相同的方式工作。 是的,在进程之间桥接是命名管道的主要用例。 Windows支持另一个用于广播的对象,即邮件槽。 它从未移植到.NET,它是没用的。 广播不可靠,就像在拥挤的足球场大喊大叫,没有任何人能听到你的保证。 如果您需要广播,那么您应该考虑使用UDP套接字。 当然还要处理随机丢失数据的后果。 如果考虑命名管道,WCF是通常的建议。 它在它们上面放置一层,使它们更容易使用。 No, a single p ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。