.NET中程序之间的通信
我想分开程序的模块以相互通信.它们可能在同一台计算机上,但可能在不同的计算机上. 我正在考虑两种方法: 创建一个具有所有详细信息的类.将其发送到通信层.这个序列化,将其发送给它,另一侧可以将其恢复到类中,而不是将其进一步处理. 创建一个标签(键/值的东西).将所有数据放入其中.将其发送给通信层等 因此,它归结为hashtable vs类. 如果我认为"松散耦合",我喜欢散列.很容易更新一个模块,在匆忙中包含新的额外参数,而不会更新另一面. 然后,我再次使用一堂课,我获得编译时类型检查,而不是运行时. 以前有人解决了这个问题,并对此提出了建议? 谢谢! 编辑: 我已经授予了与我最初的问题最相关的答案的积分,尽管这不是被投票最多 的答案. 解决方案 一个人倾向于在分布式系统设计中遇到这种问题.它在Web服务(定义参数和返回类型的WSDL)中浮出水面,其中消息格式可能为XML或其他定义明确的格式.在所有情况下,控制客户端和服务器的耦合的问
22 2024-04-23
编程技术问答社区
使用 VB.NET 保存并获取 'HKEY_LOCAL_MACHINE/Software'中的注册表值
在我的vb.net项目中,我想保存并在" hkey_local_machine \ software"中获取注册表值,但是我只能保存并将其保存并在" hkey_local_machine"中获得,而不是软件. 这是我的代码: 用于设置值 My.Computer.Registry.LocalMachine.SetValue("Study", "1") 获得值 Dim RegistryCheck As String = My.Computer.Registry.LocalMachine.GetValue("Study") 解决方案 您必须验证是否有hkey_local_machine写(并阅读)的权限.如果您无法获得所需的权限(这是很可能的),请选择hkey_current_user(my.computer.registry.currentuser).无论如何,您必须指定所需的权限:阅读/读取.请参阅OpenSubkey()方法的过载.其中两个让您指定这些要
10 2024-04-23
编程技术问答社区
有哪些学习软件设计/架构手册的好书?
不是一本谈论如何编码的书,而是软件的更高级别的组织. 解决方案 > and 我不支持学习模式,因为如果未正确理解意图,滥用它们会更容易. (如果您有锤子的东西,一切似乎都是指甲).我没有任何反对模式,但我已经看到初级开发人员滥用它,因此很难维护产品. 其他解决方案 我在RWTH的教授推荐了以下内容: Jacobson,I.等(1992):面向对象的软件工程 Meyer,B.(1997):面向对象的软件构建,第二版,Prentice Hall,ISBN 0-136-29155-4 其他解决方案 虽然也许不是严格与建筑有关的(尽管我相信您会发现大多数建筑模式的处方充其量仅是指南 远非全面) >史蒂夫·麦康奈尔(Steve McConnell a>确实需要阅读.比教您设计模式更重要的是,它会教会您成为一个更好的程序员,以便您可以自己做出这些决定.
16 2024-04-23
编程技术问答社区
简洁的架构模式
我也阅读了几个文档,内容涉及整个清洁架构和特定于Android的文档. 我完全喜欢为每个新功能创建一个单独的模块的想法,但是我担心的是如何组织数据层对象?我希望它们可以重新使用. 数据层是否应该与所有特征模块一起是一个单独的模块,或者应该将数据层分解为组件作为模块?例如.网络,数据库等单独的模块? 解决方案 查看此项目,以获取用于Android的干净体系结构框架. https://github.com/karumi/rosie .为了回答您的问题 - 我亲自将每个模块的网络组件分开,并将它们注入需要它们的适当功能模块.例如,想象一下我正在创建某种Twitter客户端 - 我可能有一个类FeedManager,它可以揭示获取FEET的方法,而TweetManager则可以揭示创建新推文的方法.但是,这个示例有点过分杀伤,因为Feedmanager和Tweetmanager可能很小. 过早地警惕过度构造.拥有一个为应用程序中每个网络请求的方法的单个网络模块是一种代码
16 2024-04-23
编程技术问答社区
自动刷新移动应用程序的高效设计
几天前,我出现了这个问题.要求是设计一个为用户提供运动内容的移动应用程序(例如足球). 该应用程序将允许用户订阅特定团队. 根据用户团队的选择,这些应用仅在用户主屏幕上提供与该团队相关的内容. 当然,用户可以选择所有团队的内容(通过菜单选项). 特别的重点是用户主屏幕上的内容如何自动刷新,还应考虑用户已(或未)订阅特定团队的内容. 在最后一个问题上,我建议以下2个解决方案: 1)该应用程序可以向服务器发送微小的请求,该请求仅包含用户的标识符,用户的团队选择.根据输入请求中的团队选择,服务器将仅返回与团队相关的内容. 2)如果内容量较小,并且不同团队的数量很少,则广播所有信息,然后让应用程序进行必要的过滤(当然,与#1相比,这效率较低). 在论坛上分享此决定,以获得其他可能的设计决策.如果这不是正确的论坛,请在评论中回答,我将在适当的论坛中发布. 谢谢 解决方案 基本上,当您要进行自动删除系统时,您只有两种方式: 1:客户定期发送请求.如果
10 2024-04-23
编程技术问答社区
Azure DevOps:发布版本
我将在Azure DevOps中创建我的CI/CD管道,但是我对发行版号有问题.使用此ci/cd a dotnet应用程序构建和创建的docker映像,所以我想让docker映像释放编号与:v1.2.0和.....但目前我有号码:例如:10,11,.. .. .或仅是最新标签! 有人可以支持我拥有自己的发行版号吗? 谢谢 解决方案 您可以在版本管道 - >选项 - >常规 - >发布名称格式中设置发行版号. $(rev:r)是一个增量变量.因此,您可以将其添加到发行版中. 例如:V1.2.$(rev:r) 结果: 注意:$(rev:r)从1(1,2,3 ...). 计数 根据您的要求,您正在使用CI和CD流程,似乎您需要从0中进行计数.您还可以尝试使用$(build.buildnumber)变量. 这是一个步骤: step1:在构建管道(CI)中,设置计数变量(例如BuildRevision :$[counter( ' ',0)]).
14 2024-04-23
编程技术问答社区
在 UML 用例中包含和登录
我有一个基于帐户的系统,这意味着系统的每个功能只能在登录后使用.据我所知,在用例图中,如果我们在基本情况下"包含"某些东西,如果它毫无意义没有包含的操作.回到我的问题,我必须绘制上述系统的用例图,并且由于登录后可以使用系统的每个功能,我是否必须在每个用例中登录"? 解决方案 否.定义"用户已记录"作为用例"登录"的后条件和其他用例的前提是常见的做法. 在用例社区中,人们在"登录"是否应该是用例中不同意.根据UML的说法,每个用例都必须产生可观察到的结果,该结果对参与者或其他利益相关者具有价值.在我看来,诸如"登录"之类的用例不满足这一要求.尽管如此,此用例还是描述在登录过程中系统行为的有用方法,因此我只能保留您的"登录"用例.
32 2024-04-23
编程技术问答社区
我应该在多个微服务之间共享模型吗?
我处于一个大型项目的分析阶段,该项目将使用微服务架构创建.我非常有信心(至少在接下来的三年中)整个代码库将用打字稿编写,并且大多数模型将在这些服务之间使用. 我打算使用微服务来构建此功能,因为每个模块将是一个单独的API,它将具有其休息终点,以处理有关其责任的任务.例如,身份服务将处理注册,身份验证,令牌续订等... 我打算将每个服务作为独立的Nestjs项目创建.及其存储库,软件包,依赖项等... 但我有疑问: 这些服务是否应该在内部声明每个模型?即使可能是相同的模型在另一个服务中声明?这可能会导致整个项目的大量代码重复,对 如果他们不这样做,并且应该定义一个模型的子集 a 定义模型 x ,而服务 b 使用 x 的子集称为 x1 和服务 b 使用 x 的另一个子集,称为 x2 .每当属性可能会更改(被删除,更改类型,名称或其他)时,当这些项目可能为10、20或更多时,哪一种是保持每个项目中这种更改的最佳方法? 我很困惑,因为我知道的是,微服务应该是独
4 2024-04-23
编程技术问答社区
解决相互作用的组合爆炸的最佳方式是什么?
我现在正在处理的一件事与游戏有一些相似之处.出于插图的目的,我将使用一个虚构的,假设的游戏来解释我的问题. 让我们称之为 Deathblaster 4:死亡.在DB4中,您有许多Ship对象,它们在旅行时会定期和随机遇到Phenomena.给定的Phenomenon在Ship上可能具有零,一个或更多Effects.例如,我们可能有四种Ships和三种Phenomena. Phenomena ========================================== Ships GravityWell BlackHole NebulaField ------------ ------------------------------------------ RedShip +20% speed -50% power -
6 2024-04-18
编程技术问答社区
在单元测试中模拟Automapper是一个好的做法吗?
有一个代码库,我们使用autoMapper,并有2层,Domain和Service.每个都有其数据表示的对象,DomainItem和ServiceItem.该服务从域中获取数据,该数据使用构造函数注入的自动应用程序实例映射 class Service { public ServiceItem Get(int id) { var domainItem = this.domain.Get(id); return this.mapper.Map(domainItem); } } 假定最佳实践,因此映射器没有副作用,也没有外部依赖性.您会写一个静态函数,以在几秒钟内将一个对象转换为另一个对象,只需映射字段. 考虑到这一点,在这样的单位测试中嘲笑映射器是一个好习惯吗? [TestClass] class UnitTests { [TestMethod] public void Test()
8 2024-04-18
编程技术问答社区
我应该在私有/内部方法中加入null参数吗?
我正在编写一个具有多种公开课程和方法的库,以及库本身使用的几个私人或内部类别和方法. 在公共方法中,我有一个无效的检查和类似的投掷: public int DoSomething(int number) { if (number == null) { throw new ArgumentNullException(nameof(number)); } } ,但是这让我思考,我应该在哪个级别添加参数null检查到方法中?我还开始将它们添加到私人方法中吗?我应该只为公共方法做吗? 解决方案 最终,对此没有统一的共识.因此,我没有给出是或否答案,而是尝试列出做出此决定的注意事项: null检查您的代码.如果您的程序简洁,则在不表达该程序的目的或行为的情况下,他们的零护卫可能会构成整体大小的重要组成部分. 无效检查表达前提条件.如果一种方法将失败时,当一个值之一为null时,在顶部进行无效检查是向休闲读者展示此方法的好方
8 2024-04-17
编程技术问答社区
有没有办法轻松地将不同的实现注入应用程序的不同层?
我想知道是否有一种简单的方法来确定ASP.NET Core中的界面实现. 例如,以此图为图 假设dataAccess.customer和dataAccess..employee都取决于其存储库中的iMysqlConnection. 但两层都需要不同的连接配置选项或实现 是否有一种简单的方法使应用程序层自动为所有潜在的dataAccess.customer和dataAccess.employee repositories自动注入不同的imysqlconnections? 或者会有更好的方法来处理此操作? 谢谢! 解决方案 如果您正在使用或可以升级到.NET 8,则可以使用新介绍的功能允许键控服务注册.例如: builder.Services.AddKeyed{Lifetime}("Customer", (sp, key) => ...); builder.Services.AddKeyed{Lifetime
10 2024-04-17
编程技术问答社区
存储库和数据映射器模式
在有关存储库和数据映射器的大量阅读后,我决定在测试项目中实现这些模式.由于我是这些新手,因此我想了解您如何在一个简单项目中实现这些方法. 杰里米·米勒(Jeremy Miller)说: 做某种非平凡的个人编码项目,您可以在其中自由尝试设计模式. ,但我不知道我做了所有这些事情. 这是我的项目结构: 您可以看到,有很多文件夹,我将在下面详细描述它们. 域:项目域实体去这里,我有一个简单的人员类,该类是从EntityBase类继承的,EntityBase类具有一个名为ID的单个属性. public int Id { get; set; } 基础结构:这是一个带有两个类的简单数据访问层. SQLDATALAYER是一个简单的类,它是从名为Datalayer的抽象类继承的.在这里,我提供了一些功能,例如以下代码: public SQLDataLayer() { const string connString = "ConnectionS
10 2024-04-11
编程技术问答社区
前端和后端术语
在ASP.NET中设计Web应用程序时,我通常将项目分为两个部分,后端(管理员部件)和前端 (访客/SEO部分).假设我的访问者可以在网站上登录,并将完成许多任务,例如填写配置文件,发送消息等. 那部分(已经过身份验证的用户)在前端和后端寻找我不同的"层",并且在某种程度上很难定义是否是前端(为什么访问者/用户会处理它,但没有ADMINS)或如果是后端(为什么用户会主动在数据库中进行更改,例如Admins,但权利更少). 有一个术语可以定义"层",例如"中端",或者我在这里浮现在错误的地方,并且有一个明确的定义(我未知)? 解决方案 我会称呼这些: 公共区域 用户区域 管理区域 总体而言,我将这些确定为"区域"或"区域".对我来说,"后端"是指在服务器上运行的代码,而"前端"是指该代码的输出.我会避免使用该术语. 这是一个非常主观的答案,但这似乎是您问题的本质. 有趣的是,开发中最大的障碍有多多:"我应该怎么称呼?!" 其他解决方案
18 2024-03-26
编程技术问答社区
我是否应该在我的应用程序中最终声明swing组件?
在我的应用程序中,我有许多秋千组件. 我是否应该在我的班级中最终确定这些组件变量,然后在构造函数中实例化,或者应该直接实例化它们而不使其最终实例化. public class MyClass { private final JFrame firstFrame; private final JPanel firstPanel; private final JButton firstButton; public MyClass() { firstFrame = new JFrame(); firstPanel = new JPanel(); firstJButton = new JButton(); } } 考虑到设计和优化,这种方法是更好的. 以下方法更好. public class MyClass { public void createGUI() {
10 2024-03-22
编程技术问答社区
去中心化的用户认证--可能吗?
我正在设计完全分布式 P2P消息传递应用程序. 编辑:不仅是任何消息传递应用程序 - 特别是公共论坛.消息从邻居传递给邻居,因此可能来自原始作者以外的同伴传递消息.沟通的保密并不重要.但是,对消息作者的验证至关重要. 问题需要简介: 在客户端服务器模型中,每个客户端都可以确保消息的起源是消息所说的,因为有一个"中间人"身份验证服务器检查用户的凭据(用户名,密码)匹配一个条目在将消息传递给接收客户端之前,在内部秘密数据库中. 问题是:可以在纯P2P中实现吗? 假设每个客户端存储完整的用户凭据.当然,不同的是,客户无法查看它们 - 因此将其存储在加密格式中.必须检查加密的凭据是否相对于另一组加密凭据,而无需完全解密. . 可以做到吗?有更好的方法吗? (还记得:100%P2P.没有服务器.) 解决方案 我建议您查看一个名为 Trust of Trust 的模型.例如,PGP使用它来分散身份验证. 此报价很好地总结了它: 随着时间的流逝,
16 2024-03-20
编程技术问答社区
视图模型和数据传输对象之间的区别是什么?
我将这个问题基于Fowler Poeaa.鉴于您熟悉此文本,ASP.NET MVC中使用的ViewModels是否与DTO相同?为什么或者为什么不?谢谢. 解决方案 它们有类似的目的(封装了应用程序的另一层数据),但出于不同的原因,它们这样做. DTO的目的是减少应用程序层之间的呼叫数量,尤其是当这些调用价格昂贵时(例如分布式系统). DTO几乎总是很琐碎的序列化,几乎永远不会包含任何行为. 例如,您正在开发一个电子商务网站. CreateCustomer和AddCustomerAddress是数据库级别的单独操作,但是出于绩效的原因,您可能希望将其数据汇总到a NewCustomerWithAddressDto中,以便您的客户只需要对服务器进行一次往返,并且不使用' t需要注意服务器可能会用数据包进行大量不同的事情. 术语" ViewModel"是指MV*不同口味的事物略有不同,但其目的主要是关注点的分离.除了演示文稿以外,您的模型经常是针对某些目的而优化的,
10 2024-03-12
编程技术问答社区
替代Java.lang.Object的Map
因此,我必须构建一个新的Java应用程序,并且有一个场景,我倾向于使用周围的铸件图.我只是不喜欢这个主意,但无法找到更好的解决方案. 这是场景:我有一些用户输入以及定义要采取的操作的标签.首先,基于标签,用户输入将充满一个或多个对象,然后将其传递给验证机的处理器.这些验证器有些通用,因此它们可以用于一个或多个标签.那是地图的来源,它将是验证器的输入,因为他们知道要使用的地图的哪个键. 我一直在研究命令设计模式的链,但是它使用了一个请求,在我的情况下,请求可能会根据标签而有所不同.另外,我的验证机已经实现了主要目的. 有更好的解决方案吗? 解决方案 如果您不想编写自己的Typesafe异质容器,请考虑Netty的 attributemap ,可在 netty-common 库.
16 2024-03-03
编程技术问答社区
VIPER-互动者是否应该只返回必要的信息?
在 viper "> viper 设计模式,如果交互器返回所有信息,请返回所有信息可以由多个演示者动作使用,或者我应该为每个结构都有一个单独的结构? 就我而言,我有一张显示位置的地图.要显示那些地方,我需要从一个只有坐标和颜色(用于更改销钉的头颜色)中检索ploteitem的列表,该坐标和颜色将由主持人转换为注释. > 现在说,当用户选择地图中的一个注释之一时,应显示一个标注气泡,并提供更多详细信息,例如该地点的名称和带有颜色的圆圈. 现在,我应该创建一个retrieveplaceCalloutInteractor,它只能返回一个地方的信息,而不是多个位置的信息列表(对吗?或我应该对两种情况只有一个交互器?). 应该此retrievePlaceCalloutInteractor返回一个位置的名称和颜色(无坐标)的placeCalloutItem,或者我应该拥有带有坐标,颜色和名称的单个placeItem,该placeTem将由retroveiveplacecal
10 2024-03-03
编程技术问答社区
我应该如何测试包含获取当前日期的调用的逻辑?
例如,我有这个Kotlin类和方法(如果很重要的话,春季管理的类): import org.springframework.stereotype.Service import java.time.LocalDateTime data class TestObj( val msg: String, val dateTime: LocalDateTime ) @Service class TestAnotherService { fun doSmthng1(testObj: TestObj) { println("Oh my brand new object : $testObj") } } @Service class TestService( private val testAnotherService: TestAnotherService ) { fun doSmthng() { testAn
2 2024-03-03
编程技术问答社区