C# 构造函数之外的对象构造

2024-03-25

当涉及到设计类以及它们之间的“通信”时,我总是尝试以所有对象构造和组合都在对象构造函数中进行的方式进行设计。我不喜欢从外部进行对象构造和组合的想法,就像其他对象设置属性并调用我的对象上的方法来初始化它一样。当多个对象尝试对您的对象执行此操作并且您永远不知道您的 props\methods 将以什么顺序执行时,这尤其变得丑陋。

不幸的是,我经常遇到这种情况,特别是现在随着依赖注入框架的日益流行,许多库和框架依赖于某种外部对象初始化,并且通常不仅需要对我们的对象进行构造函数注入,还需要属性注入。

我的问题是:

  1. 可以让对象依赖于某种方法或属性来调用它们,然后它们可以认为它们已初始化吗?

  2. 当您的对象充当接收者并且必须支持调用它的多个接口并且这些调用的顺序很重要时,是否存在某种模式? (比设置标志更好的事情,例如 ThisWasDone、ThatWasCalled)


可以让对象依赖于某种方法或属性来调用它们,然后它们可以认为它们已初始化吗?

不。初始化方法很痛苦,因为不能保证它们会被调用。一个简单的解决方案是切换到接口并使用工厂或构建器模式来组成实现。

@Mark Seemann 写了一篇关于它的文章:http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling.aspx http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling.aspx

当您的对象充当接收者并且必须支持调用它的多个接口并且这些调用的顺序很重要时,是否存在某种模式? (比设置标志更好的事情,例如 ThisWasDone、ThatWasCalled)

生成器模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 构造函数之外的对象构造 的相关文章

随机推荐

  • jQuery 组合框/选择自动完成? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否存在用于替换选择 组合框的 jQuery 插件 我尝试了SexyCombo 它与我想要的非常接近 但
  • 2 个数组值之一颜色之一使 D3 条形图在值的相同索引处具有颜色

    我有 2 个数组 values 1 2 3 4 5 4 7 2 9 10 colors red red blue blue green green orange orange pink pink 我正在尝试构建一个 D3 条形图 其中每个条
  • .NET Windows 窗体应用程序自我更新的最佳方式是什么?

    我使用自行开发的系统 其中应用程序通过 Web 服务自行更新 然而 我似乎记得最初的 NET 销售宣传中有关组件自动更新是 NET 的内置功能的内容 让应用程序更新自身和 或其使用的程序集的最佳实践是什么 您可能想了解一下 Click On
  • 在 Cypress 中多次拦截相同的 API 调用

    是否可以使用cy intercept在同一个测试中多次拦截相同的 API 调用 我尝试了以下方法 cy intercept pathname url method POST as call1 some logic cy wait call1
  • 将 sfml 与 cmake 链接 (Windows MinGW)

    我好像无法链接SFML到我的可执行文件使用cmake CMakeLists txt cmake minimum required VERSION 3 0 0 project Tut3 set LIBS DIR Libraries add e
  • 使用 Google Cloud Platform 部署管理器模板创建存储桶

    我正在尝试使用 GCP Deployment Manager 创建存储桶 我已经完成了快速入门指南并能够创建一个compute v1 instance 但我正在尝试在 Google Cloud Storage 中创建一个存储桶 但无法获得除
  • 在 Win7 中的 ruby​​ 命令提示符下安装 Rubygems 时出错

    当我尝试在 Win7 32 位 中的 Ruby 命令提示符下安装 ruby gems 时 出现以下错误 请注意 我安装了 Ruby1 9 3 并已将 devkit DevKit tdm 32 4 5 2 20111229 1559 sfx
  • 使用backbone.js处理belongs_to关系

    我对backbone js有点陌生 我正在努力获取具有belong to关系的集合 我想获取用户列表 users GET 并且我想显示所有用户 但带有belongs to关联 例如显示用户的公司名称 有人知道解决办法吗 我正在将 Ruby
  • 在 jupyter 上安装 gnuplot

    我想用 gnuplot 绘制条形图 但我安装时遇到问题 我正在使用 jupyter anaconda 以下代码不适用于安装 conda install gnuplot py pip install gnuplot py pip instal
  • CSS/JS 中的动态 URL

    我正在拆分我的一个较大的应用程序 并引入一个 cdn url 来容纳 CSS javascript 和图像等常见对象 以避免重复 不过 我需要做的是为我们的开发环境提供单独的 URL 因此我可能有 http cdn dev example
  • 将数据 URI 转换为图像数据

    Converts data URI in image png format to an image data object param dataURL Base64 encoded string returns ImageData unde
  • 为什么 gcc 允许使用大于数组的字符串文字初始化 char 数组?

    int main char a 7 Network return 0 A 字符串字面量在 C 中是内部终止的空字符 因此 上面的代码应该给出编译错误 因为字符串文字的实际长度Network是 8 并且它不能放入char 7 array 然而
  • 使用具有 SAML 2 的 Identity Server 与其他身份提供商进行 SSO

    我使用 Identity server 4 和 OIDC 实现了身份验证和授权 以允许访问我们的应用程序的客户端获取访问我们的资源服务器 Web API 所需的令牌 这是当前的架构 Identity Server 4 使用我的自定义数据库对
  • JPA 按两个日期之间的日期查找

    在这里 我尝试使用 JPA 从 MYSQL DB 获取数据 但我在设置数据对象来处理条件时遇到麻烦 据我所知 我必须创建数据对象来处理它 我如何创建日期对象来处理需要的 这是我的正常查询 select t id t MSISDN t Par
  • Ruby on Rails:如何在 Windows 上后台自动启动 WEBrick 服务器?

    为了在 Windows XP 上运行我的 Rails 应用程序 我打开命令行 cd 到应用程序的目录 然后运行rails server 我想自动化此操作 这样每次我打开计算机时 我所要做的就是输入localhost 3000在浏览器中 我怎
  • 使用 Python JSON 序列化类并更改属性大小写

    我想创建一个类的 JSON 表示形式并自动更改属性名称snake case to lowerCamelCase 因为我想遵守 Python 中的 PEP8 以及 JavaScript 命名约定 也许更重要的是 我正在与之通信的后端使用low
  • 使用 AUGraph 播放麦克风的声音

    当我使用AUGraph实现麦克风播放声音时 我有一个问题 在设备 iphone 3g 中 我只能从耳机的右侧听到 但在模拟器中效果很好 我可以从耳机的两侧听到声音 这是我用来将输入连接到输出的代码 AUGraphConnectNodeInp
  • jsonschema2pojo 中的 JSR-303 激活

    有一个地方在jsonschema2pojo描述启用可能性的文档JSR 303注释生成 https github com joelittlejohn jsonschema2pojo wiki Reference minimummaximum
  • Android中加载数据到TextView

    我有一个像 Yes No Dontknow 这样的 XML 标签 我正在解析 XML 文件并获取数据 现在我需要在单独的 TextView 中显示每个选项 即 是 应显示在一个 TextView 中 否 应显示在另一个 TextView 中
  • C# 构造函数之外的对象构造

    当涉及到设计类以及它们之间的 通信 时 我总是尝试以所有对象构造和组合都在对象构造函数中进行的方式进行设计 我不喜欢从外部进行对象构造和组合的想法 就像其他对象设置属性并调用我的对象上的方法来初始化它一样 当多个对象尝试对您的对象执行此操作