jjzjj

solid-principles

全部标签

go - go中的包解耦

我们都知道依赖注入(inject)使包解耦。但是我对go中依赖注入(inject)的最佳实践有点困惑。让我们假设包用户需要访问配置包。我们可以将Config对象传递给User方法。这样,只要新代码解析接口(interface),我就可以更改Config包功能。另一种方法是直接调用Config包方法,在这些情况下,只要方法名称保持不变,我也可以更改Config代码。像这样更新:这两种方法有什么不同:packageUserfuncfoo(configConfigObject){config.Foo()}还有这个:packageUserimportConfigfuncfoo(){config

go - 多Consumer场景下Go接口(interface)应该在哪里定义?生产者中的界面如何显示通用性?

有人可以给我这个建议的具体例子吗?https://github.com/golang/go/wiki/CodeReviewComments#interfaces这就是我遵循的方式吗?packageworkertypeinterfaceDB{getAllTable()}typeworkerstruct{dbDB}func(wworker)doSomething(){w.db.getAllTable()}packagelistenertypeinterfaceDB{getAllTable()}typelistenerstruct{dbDB}func(llistener)doSomethin

solidity开发智能合约

文章目录1Solidity与智能合约2智能合约概述3以太坊简介4以太坊交互工具5开发环境搭建5.1remix在线编译器5.2搭建本地网络5.2.1安装本地remix-ide5.2.2安装remixd5.3编译合约5.4编译原理6常见概念7Solidity基础语法7.1数据类型分类7.2remix的使用--第一个智能合约7.3值类型7.3.1布尔bool7.3.2整形intuint7.3.3函数类型7.3.4地址(Address)7.3.5枚举类型(enums)7.3.6定长字节数组7.4引用类型7.4.1不定长数组7.4.2字符串(string)7.4.3引用类型的内存分配(memory和st

如何用 Solidity 创建一个“Hello World”智能合约

最近发几篇简单的入门文章,帮助刚刚进入行业的工程师。这篇文章将带你学习如何使用智能合约开发语言Solidity创建一个名为“HelloWorld”的智能合约。这篇文章不需要先验知识,初学者也很容易上手,跟着下面的步骤操作也可以轻松地的创建你的第一个智能合约。什么是智能合约智能合约是在区块链环境中发布和运行的计算机程序。由于它运行在区块链上,所以其运行不需要中心化的组织或服务器。由于区块链的不变性,智能合约一旦被发布,就无法对其更新或修改。但智能合约中可能编写有具有更改数据功能的函数。信息可以在一个块中记录并在另一个块中删除,其历史记录会被保存并可以对其审核。Solidity编程语言Solidi

Solidity中的calldata,storage,memory

目录calldatamemorystorage三者之间的转换storage作为参数,赋值到memory(1)(2)(3)storage作为参数,赋值给storagememory作为参数,赋值给memorymemory作为参数,赋值给storagecalldata官方文档对calldata的描述:Calldataisanon-modifiable,non-persistentareawherefunctionargumentsarestored,andbehavesmostlylikememory.翻译:Calldata是一个不可修改的、非持久化的区域,函数参数存储在这里,其行为主要类似于内存。

c# - 真实世界的开源 c# 应用程序展示了良好的代码

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我一直在阅读SOLID原则,想知道DOTNET中是否有一个很好的大型开源应用程序或项目展示了在现实世界产品中使用的SOLID原则。如果有任何其他开源项目被认为是很好的编码示例,我也很想看看它们。

c# - 如何遵守 Liskov 替换原则 (LSP) 并仍然受益于多态性?

LSP说“派生类型不能改rebase类型的行为”,换句话说“派生类型必须完全可以替换它们的基类型”。这意味着如果我们在基类中定义虚方法,我们就违反了这个原则。另外,如果我们使用new关键字在驱动方法中隐藏一个方法,那么我们又违反了这个原则。换句话说,如果我们使用多态性,我们就违反了LSP!在许多应用程序中,我在基类中使用了虚拟方法,现在我意识到它违反了LSP。另外,如果你使用模板方法模式,你就违反了我经常使用它的原则。那么,当您需要继承并且还希望从多态性中获益时,如何设计符合此原则的应用程序呢?我很困惑!请参阅此处的示例:http://www.oodesign.com/liskov-s

c# - C#中的重用抽象原则

在我们的C#MVC应用程序中,我们有很多接口(interface)与实现它们的对象一对一映射。即:基本上,对于创建的每个对象,都执行了“提取接口(interface)”操作。Moq使用这些接口(interface)为我们的单元测试生成模拟对象。但那是唯一一次重新使用接口(interface)。我们系统中没有具体对象实现多个接口(interface)。谁能告诉我这是否会在以后造成问题?如果是这样,它们会是什么?我在想,我们的应用程序有很多重复,例如在这两个接口(interface)中(编辑:在我们的服务层中)唯一不同的是方法名称和它们采用的参数类型,但是从语义上讲,他们对发送消息的存储库

c# - string.IsNullOrEmpty(myString) 或 string.IsNullOrWhiteSpace(myString) 是否违反 SRP 规则?

如问题所示,正如函数名称所示,我们正在使用像IsNullOrEmpty或IsNullOrWhiteSpace这样的字符串函数,它们做的不止一项工作,这是否违反了SRP?它不应该是string.isValid(EnumtypeofValidation)而不是使用策略模式来选择正确的策略来验证。或者在实用程序类或静态类中违反SRP是否完全可以。 最佳答案 SRP说一个函数或类应该只有一个改变的理由。改变的理由是什么?更改的原因是请求更改的用户。因此,一个类或函数应该只有一个请求更改的用户。现在,一个先进行一些计算然后进行一些格式化的函数

c# - IOC : Wiring up dependencies on event handlers

我正在构建一个WinForms应用程序,其UI仅包含NotifyIcon及其动态填充的ContextMenuStrip。有一个MainForm将应用程序保存在一起,但它永远不可见。我开始尽可能可靠地构建它(使用Autofac处理对象图)并且对我的成功非常满意,即使与O部分也相处得很好。通过我目前正在实现的扩展,我似乎发现了我的设计中的一个缺陷,需要稍微改造一下;我想知道我需要走的路,但对于如何准确定义依赖关系有点不清楚。如上所述,菜单在启动应用程序后部分动态填充。为此,我定义了一个IToolStripPopulator接口(interface):publicinterfaceITool