Questions tagged «architecture»

软件系统的高级设计和描述。架构设计提取了实现,算法和数据表示的细节,以专注于“黑匣子”组件的交互。

5
如果数字太大,会溢出到下一个存储位置吗?
我一直在审查C编程,但有几件事困扰着我。 让我们以以下代码为例: int myArray[5] = {1, 2, 2147483648, 4, 5}; int* ptr = myArray; int i; for(i=0; i<5; i++, ptr++) printf("\n Element %d holds %d at address %p", i, myArray[i], ptr); 我知道一个int可以容纳正数2,147,483,647的最大值。因此,通过遍历它,是否“溢出”到下一个内存地址,从而导致元素2在该地址处显示为“ -2147483648”?但这并没有真正的意义,因为在输出中它仍然说下一个地址保持值为4,然后是5。如果该数字已溢出到下一个地址,则不会改变存储在该地址的值? 我隐约记得在MIPS Assembly中进行编程时,看着地址在程序执行过程中逐步改变了值,分配给这些地址的值会改变。 除非我没有记错,否则这是另一个问题:如果分配给特定地址的数字大于类型(如myArray [2]中的类型),那么它是否不影响存储在后续地址中的值? 示例:我们在地址0x10010000处有int myNum = 40亿。当然,myNum不能存储40亿,因此它在该地址显示为负数。尽管不能存储这么大的数字,但它对存储在后续地址0x10010004上的值没有影响。正确? 内存地址仅具有足够的空间来容纳某些大小的数字/字符,如果大小超出限制,则其表示方式将有所不同(例如尝试将40亿存储到int中,但它将显示为负数),并且因此,它不会影响下一个地址中存储的数字/字符。 对不起,如果我过分。从那以后,我整天都在闹大闹鬼。

1
动态表单生成器表单和数据库设计?[关闭]
假设您的用户可以创建自己的基于Web的表单(文本框,选择框等),然后将其发布到Web上以供用户填写。 是否有人有资源或关于如何构建数据库以将其绑定到动态表单方面的建议? 例如,您会为每个表单或给定表单的不同版本创建一个子表吗?

4
组件和模块之间有区别吗
我对术语模块和组件有一些疑问。在我看来,模块是捆绑的类,只能通过定义明确的接口访问。它们隐藏了所有实现细节,并且可以重用。模块定义了它们所依赖的模块。 组件有什么区别?我在一些书中进行了查找,但是组件的描述非常相似。

4
微服务应该互相交谈吗?
我正在设计使用微服务的应用程序,但不确定使用哪种最佳机制从多个服务收集数据。 我相信有两种选择: 集成了“服务间”通信机制,该机制允许服务直接对话。在将合并的响应返回给API网关之前,API网关将调用单个服务,然后再调用其他服务来收集数据。然后,API将响应返回给调用方。(当对serviceB的调用需要serviceA的响应时,这必须是同步调用。IE单独的人和地址服务。) 让API网关直接调用每个服务,并在返回响应之前合并API中的数据。 我倾向于第二种选择,因为使服务彼此交谈会引入耦合,在这种情况下,我最好还是构建一个整体应用程序。但是,使用此选项时,我可以想到一些严重的缺点: 让API执行对多个服务的多次调用会增加API服务器的负载,尤其是在其中某些调用处于阻塞状态时。 这种方法意味着API必须“知道”应用程序正在尝试做什么(IE Logic必须被编程到API中才能依次处理调用服务,然后合并数据),而不仅仅是充当微服务的愚蠢“终点”。 我想知道解决此问题的标准方法是什么,是否还有我遗漏的第三种选择?

7
如何处理未处理的异常?(终止应用程序与保持活动状态)
当桌面应用程序中发生未处理的异常时,最佳实践是什么? 我当时想向用户显示一条消息,以便他可以与支持人员联系。我建议用户重新启动应用程序,但不要强行执行。与此处讨论的内容类似:ux.stackexchange.com-处理意外的应用程序错误的最佳方法是什么? 该项目是.NET WPF应用程序,因此所描述的提案可能看起来像这样(请注意,这是一个简化的示例。可能有必要隐藏异常详细信息,直到用户单击“显示详细信息”并为轻松报告错误): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" + "We recommend to restart the application. " + …

11
多少个设计模式和抽象级别是必需的?[关闭]
我怎样才能知道我的软件有太多的抽象和太多的设计模式,或者反过来,我怎么知道它是否应该有更多的抽象呢? 与我合作的开发人员在这些方面的编程方式有所不同。 有些人确实提取每个小功能,尽可能使用设计模式,并不惜一切代价避免冗余。 其他人,包括我在内,都试图更加务实,并编写出并非完全适合每种设计模式的代码,但由于应用了较少的抽象,因此其理解速度更快。 我知道这是一个权衡。我如何知道何时将足够的抽象放入项目中,又如何知道需要更多抽象呢? 例如,当使用Memcache编写通用缓存层时。难道我们真的需要Memcache,MemcacheAdapter,MemcacheInterface,AbstractCache,CacheFactory,CacheConnector,...,或者这是更易于维护和使用仍然只有一半时,好的代码这些类的? 在Twitter中找到了这个: (https://twitter.com/rawkode/status/875318003306565633)


1
如果规格有缺陷,是否仍应遵守?
我被指派为我的雇主的应用程序之一与客户开发的外部系统集成。我们客户的集成规范存在一些与安全性有关的明显缺陷。这些缺陷将允许未经授权的用户访问系统以查看受限制的数据。 我已经指出了缺陷及其潜在的安全风险(如果按设计实施它们),并提供了没有缺陷的替代方法,但是(总之)客户已经告诉他们“按照我们指定的方式进行操作”。 程序员是否有道德责任不实施具有已知安全风险的代码?在什么时候,客户的要求超过我们作为软件开发人员创建安全应用程序所承担的道德责任?

10
在编写简单网站(例如通讯录)时,什么是好的(简洁的)架构?
当我建立一个简单的网站(例如可以在其中添加,删除和更新联系人的通讯录)时,我会创建一个index.php文件,在该文件中,如果用户未登录,则要求用户输入密码,如果用户输入正确的密码,则分配了会话,并可以与联系人进行某些操作。 我有两个文件: 第一个(contacts.php)用于显示HTML代码。在HTML代码上方,我包括第二个文件并创建类。 第二个(contacts_class.php)包含添加,删除和更新的所有方法。 我认为可以,但是在实施大型项目时,我应该怎么做?我是否必须为每个页面创建文件夹并将文件放入其中(如上面的HTML和类),我应该怎么做?什么是一个好的且整洁的体系结构,用于构建其他程序员都能完全理解的大型项目?

2
MVC体系结构的最佳做法
我的问题更多是关于如何构建MVC应用程序。例如,鼓励我们使用带有存储库模式的DI来分离控制器的数据访问,但是在HOW上很少提到专门针对MVC做到这一点。例如,我们将存储库类放在哪里?它们似乎与模型无关,因为模型也应该与实际的数据访问技术相对分离。 第二个问题涉及如何构造层或层。大多数示例应用程序(书呆子晚餐,音乐商店等)似乎都使用单层2层方法(不计算测试),通常具有直接调用L2S或EF代码的控制器。 如果要创建多层/层应用程序,那么关于MVC的最佳实践是什么?

4
为什么要将登录页面与单个页面应用程序分开?
我想知道为什么将SPA的登录页面作为单独的页面而不是SPA的页面(如在加载和通过ajax请求发送数据中)的页面似乎很流行? 我唯一能想到的就是安全性,但是我无法想到特定的安全性原因。我的意思是,唯一想到的是,如果您的登录页面是SPA的一部分,它将通过ajax发送用户名/密码,而Firebug或网络检查器之类的工具也可以看到该用户名/密码,即使您以普通方式发送该用户名/密码POST请求,还有其他可以轻松捕获此数据的工具(例如fiddler,httpscoop等)。 我有什么想念的吗?

9
您如何组织高度定制的软件?
我正在从事一个大型软件项目,该项目针对世界各地的各种客户进行了高度定制。这意味着我们可能有80%的代码在各个客户之间是通用的,但是还有很多代码必须从一个客户转换到另一个客户。过去,我们是在单独的存储库(SVN)中进行开发的,而当一个新项目开始时(我们的客户很少,但客户众多),我们根据过去的项目中最能满足我们需求的代码创建了另一个存储库。过去一直有效,但是我们遇到了几个问题: 在一个存储库中修复的错误不会在其他存储库中修补。这可能是组织问题,但我发现很难在5个不同的存储库中修复和修补错误,请记住,维护该存储库的团队可能位于世界的另一部分,并且我们没有测试环境,既不知道他们的时间表,也不知道他们有什么要求(一个国家的“错误”可能是另一个国家的“功能”)。 为一个项目进行的功能和改进可能对另一项目也可能有用,或者丢失了这些功能或进行了改进,或者如果将这些功能和改进用在另一个项目中,则经常导致将它们从一个代码库合并到另一个代码库的麻烦(因为两个分支可能已经独立开发了一年) )。 如果必须在分支之间合并所有这些更改,则在一个开发分支中进行的重构和代码改进可能会丢失或造成的危害大于弊。 我们现在正在讨论如何解决这些问题,到目前为止,我们提出了以下解决方案: 将开发保持在单独的分支中,但是要通过建立一个中央存储库来更好地组织它,其中将常规错误修复程序合并到其中,并使所有项目定期(例如每天)将来自该中央存储库的更改合并到自己的更改中。这需要庞大的纪律和分支之间的合并工作。因此,我不相信这会奏效,并且我们可以保持这一纪律,尤其是在时间压力加大的情况下。 放弃单独的开发分支,并建立一个中央代码存储库,我们所有的代码都将存在于此,并通过具有可插拔模块和配置选项进行自定义。我们已经在使用Dependency Injection容器来解析代码中的依赖关系,并且我们在大多数代码中都遵循MVVM模式,以将业务逻辑与UI完全分开。 第二种方法似乎更优雅,但是这种方法有很多未解决的问题。例如:如何处理模型/数据库中的更改/添加。我们将.NET与Entity Framework结合使用来拥有强类型化的实体。我看不到如何处理一个客户所需的属性,而又另一个客户无用的属性而又不会弄乱我们的数据模型。我们正在考虑通过使用卫星表(有一个单独的表,其中特定实体的额外列与原始实体1:1映射在一起)解决数据库中的问题,但这仅是数据库。您如何在代码中处理此问题?我们的数据模型位于一个中央库中,使用该方法我们将无法为每个客户扩展。 我敢肯定,我们不是唯一一个在这个问题上苦苦挣扎的团队,我很震惊地发现关于该主题的资料很少。 所以我的问题如下: 您对高度定制的软件有什么经验,选择了哪种方法以及它如何为您工作? 您推荐哪种方法,为什么?有没有更好的方法? 您是否可以推荐有关该主题的好书或文章? 您对我们的技术环境(.NET,实体框架,WPF,DI)有具体建议吗? 编辑: 感谢所有的建议。大多数构想与我们团队中已有的构想相符,但了解您对它们的经验以及更好地实施它们的提示确实很有帮助。 我仍然不确定我们会走哪条路,也没有做出决定(单独做出),但是我会在团队中传递这一点,并且我相信这会有所帮助。 目前,男高音似乎是一个使用各种客户特定模块的单一存储库。我不确定我们的体系结构是否达到这个目标,或者我们需要投入多少资金才能使其适应要求,因此有些事情可能会在单独的存储库中保留一段时间,但是我认为这是唯一可行的长期解决方案。 因此,再次感谢您的所有回复!

2
DDD-聚合根的存储库是否处理保存的聚合?
我正在对现有应用程序的未开发模块使用类似DDD的方法;由于架构原因,它不是100%DDD,但我正在尝试使用一些DDD概念。我有一个界上下文(我认为这是适当的期限-我仍然在学习DDD)由两个实体:Conversation和Message。对话是根源,因为没有对话就不存在消息,并且系统中的所有消息都是对话的一部分。 我有一个ConversationRepository类(尽管它实际上更像是一个网关,但我使用术语“存储库”)可以在数据库中找到会话。当找到会话时,它还会(通过工厂)为该会话创建消息列表(作为属性公开)。这似乎是正确的处理方式,因为似乎不需要完整的MessageRepository类,因为只有在检索到对话时才存在该类。 但是,在保存消息时,由于它是Message的聚合根,这是ConversationRepository的责任吗?我的意思是,我是否应该在ConversationRepository上有一个名为AddMessageMessage 的方法,该方法将Message作为参数并将其保存到数据库中?还是应该有一个单独的存储库来查找/保存消息?逻辑上似乎是每个实体一个存储库,但是我也听说过“每个上下文一个存储库”。

3
x64寄存器名称中的“ R”代表什么?
我知道32位寄存器的名称就像16位寄存器一样,带有“ E”前缀以表示扩展。我一直认为这意味着从16位扩展到32位,尽管我从未见过明确声明。 我试图找出“ R”的含义,但是我的Google技术使我失败了。有人知道吗
27 architecture  x86 

8
为什么大型网站的后端和前端使用不同的语言?
我对小型MVC应用程序的理解是,您拥有处理HTML,JS,jQuery等的前端,而拥有由控制器和模型组成的后端。 但是,当我与大公司的开发人员交谈时,他们经常提到拥有前端层和后端层。所以有时候,我可能会听说他们在C#中有一个前端,在Java中有一个后端。为什么任何公司都希望使用不同语言的后端和前端?这是否有助于大型网站更好地扩展? 当人们说他们的前端是用C#构建的时,这是否意味着他们使用的是前端框架(如.NET)和后端的其他框架(如Spring)?还是意味着完全不同?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.