Questions tagged «architecture»

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

3
对使用Web服务的基于桌面的客户端进行脱机故障转移的最佳方法是什么?
我有三个共享相同问题的新项目: 他们需要在Web系统上具有逻辑,并且他们需要通过RESTful Web服务与此类系统进行通信的本地应用程序(例如销售点)。 我的解决方案 我设法提出的解决方案是在桌面应用程序消息队列中实现,以在服务离线时存储操作,更准确地说是异步消息队列。但是,这很容易(如果这是最佳解决方案)。我还关注数据同步和冲突解决。 主要系统必须基于Web,因为利益相关者需要使用Web应用程序来进行报告和监视,并且Web服务将处理多个机构的请求。 桌面客户端(最好是瘦客户端)将使用Java(更具体地讲是Netbeans)实现,而Web系统将使用Symfony2实现。其中两个项目需要客户端进行硬件集成,因此使用Web技术制作桌面应用程序(例如Appcelerator Titanium)可能会很麻烦。 我的问题 什么是可扩展的更好解决方案,这意味着以最小的努力获得最高的效率(最好没有额外的成本,例如购买备用服务器进行本地操作)? 以前还有谁处理过?您是如何解决您的问题的?您可以分享什么课程? 您如何处理同步? 编辑:在第3点中向我的问题添加了缺失的部分

2
如何使集群仅运行一次任务?
如果您有一项任务只想在服务器群集上仅运行一次,那么定期执行此操作的最佳方法是什么?在这种情况下,群集的定义是2台或更多台具有负载均衡器后面的分布式会话的相同服务器。 用例:您有一项运行成本很高的任务,该任务每X小时只能运行一次。例如,此作业可以遍历一堆记录并更新其状态。 最糟糕的情况是,两次运行作业会使您的数据无效。 最好的情况是该作业利用了所有服务器上的资源。 要求摘要: 即使节点之一关闭,该作业仍必须运行。 每个计划只能运行一次作业。 如果在同一时间或重叠时间安排了多个作业,则正在运行的作业数将在服务器之间平均分配。 机器必须具有相同的代码库,并且必须通过NTP进行同步。 根据环境变量,节点之间的配置可能有所不同。 作业必须按时开始或在指定时间的给定间隔内开始。(例如说5分钟) 可能的解决方案 将一个节点设置为主节点,这违反了上面的1,因此无效。 要求负载均衡器平衡以启动该作业。不幸的是,这具有副作用,如果您同时运行多个作业,则它们可能都由同一台机器运行。 这必须在Java的servlet容器中运行。但是,它不是我正在寻找的工作的编码。 当然,这是已知最佳解决方案可以解决的问题。 相关问题。 /programming/5949038/schedule-job-executes-twice-on-cluster 这不是重复的,因为根据上述5个要求,解决方案还不够。最高支持的解决方案存在种族问题,第二种解决方案违反了要求3

4
“通知中心”模式是否会鼓励程序设计的好坏?
有时我遇到这些消息中心式的API,例如Cocoa NSNotificationCenter:http : //developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html 通常,这些API提供您在其上订阅或广播消息/事件的全局访问点。我认为这是一个问题,因为它鼓励使用扁平且非结构化的程序体系结构,其中的依赖关系在API中不是显式的,而在源代码中则是隐藏的。您不必考虑对象的所有权和层次结构,而可以使程序中的任何对象导致在任何地方调用任何代码。但这也许是一件好事吗? 这种模式通常会鼓励程序设计的好坏,为什么呢?它会使代码更难或更容易测试吗? 如果这个问题太模糊或太宽泛,请原谅我。我正在努力避免像这样大量使用API​​的潜在后果以及使用它的不同方式。 编辑:我猜想我最大的问题是这种API依赖于依赖关系和对象耦合,并且可以通过以下示例进行说明: myObj = new Foo(); myOtherObj = new Bar(); print myOtherObj.someValue; // prints 0 myObj.doSomething(); print myOtherObj.someValue; // prints 1, unexpectedly, because I never indicated that these objects had anything to do with each other

4
如何跟踪团队看板中的质量属性?
我的团队使用看板系统来跟踪日常进度,并且对于理解功能(捕获为用户故事)的进度非常有效。随着我们开发功能的发展,直到最近,我们在很大程度上允许我们的系统设计出现。在过去的两周中,我们就与性能和可修改性质量属性特别相关的架构取舍进行了多次讨论。 我认为正在发生的事情是在实现功能和设计系统时,我们在隐式地做出有关体系结构的决策,而不是根据我们已知的质量属性要求来考虑这些决策。如果我能够跟踪/捕获/直观地描述这些重要的设计决策是如何做的,那么团队成员将有更好的机会在实施系统时不给系统架构带来额外的压力,这真是太好了。当然,更复杂的是,我们板上的功能并非仅能发挥功能,有时会掩盖架构的复杂性! 如何在团队看板上直观地跟踪质量属性(或其他与体系结构相关的决策)的进度?

2
清洁架构:什么是视图模型?
鲍勃叔叔在他的《清洁架构》一书中说,主持人应该将收到的数据放入他称为“视图模型”的东西中。 这与Model-View-ViewModel(MVVM)设计模式中的“ ViewModel”是一样的吗,还是简单的数据传输对象(DTO)? 如果不是简单的DTO,它与View有何关系?视图是否通过观察者关系从视图获取更新? 我的猜测是它更像是MVVM中的ViewModel,因为罗伯特·马丁(Robert Martin)在他的书的第23章中说: [演示者]的工作是接受来自应用程序的数据并对其进行格式化以进行演示,以便View可以将其简单地移动到屏幕上。例如,如果应用程序希望在字段中显示日期,它将向Presenter传递Date对象。然后,Presenter会将数据格式化为适当的字符串,并将其放置在称为View模型的简单数据结构中,View可以在其中找到它。 这意味着View以某种方式连接到ViewModel,而不是简单地将其作为函数参数接收(例如DTO就是这种情况)。 我认为这是因为,如果您查看图像,演示者将使用视图模型,而不是视图。演示者同时使用输出边界和输出数据DTO。 如果既不是DTO也不是MVVM中的ViewModel,请详细说明它是什么。

4
将数据值硬编码到程序中是否有优势?
我是一个自学成才的新手程序员,因此,如果我不喜欢程序员的话,我深表歉意。 我正在从事一个项目,在该项目中,我将向开发人员提供不断更新的数据,这些开发人员实际上将创建一种工具,用于根据对数据的查询生成报告。 似乎每个参与人员都认为他们需要将数据值(不是模式,而是域/值本身)硬编码到报告生成程序中。 例如,假设我们正在报告人员情况;该报告将分为几类,每个部门都有一个标题,然后在每个部门标题下将是职务的子标题,然后在每个子标题下将是雇员列表。开发人员希望对部门和职位进行硬编码。另一方面,我认为他们可以/将在运行时查询这些事情,对它们进行排序,并根据存在的值动态生成报告标题。 由于潜在价值的列表将随着时间而变化(例如,将创建/重命名部门,将添加新的职务),因此需要不断更新代码。在我看来,我们可以跳过代码维护步骤,并动态组织报告。 由于我不是开发人员,所以我想知道自己缺少什么。将值硬编码到这样的工具中可能有什么优势?这通常是程序的设计方式吗?

4
在分层软件体系结构中,同一层的对象之间具有依赖关系是否有问题?
考虑到具有n层体系结构和依赖项注入的中型软件,我很高兴地说属于一个层的对象可以依赖于较低层的对象,而不能依赖于较高层的对象。 但是我不确定要考虑那些依赖同一层其他对象的对象。 举个例子,我们假设一个应用程序具有三层和几个对象,如图像中的一个。显然,自上而下的依赖关系(绿色箭头)没问题,自下而上的依赖关系(红色箭头)不行,但是同一层内的依赖关系(黄色箭头)又如何呢? 除了循环依赖之外,我很好奇其他可能出现的问题以及这种情况下违反了多层体系结构的程度。

2
如何真正找出面向对象设计中必须要做的事情?
首先免责声明:我真的不知道这个问题是否适合该网站,但是我仍然发现它不仅对我而且对其他初学者都是一个相关的问题。如果可以改善问题以使其适合此处,请指出int注释。如果不合适,也让我知道,如果可能的话,让我知道可以在哪里讨论,因为我没有找到任何好的论坛。 我在2009年学习PHP时就学会了编程。2012年晚些时候,我转到了C#和.NET。无论如何,编码不是问题,写下算法不是我的问题。我的实际问题是要知道必须编码什么才能达到要求,必须在哪里编码。 网络上提供的大多数课程都讨论了如何 -如何用某种语言编写代码,如何使用一些API集等。这不是我的意思。 这些年来,我读了很多有关一堆东西的信息:面向对象的分析和设计,设计模式,领域驱动的设计等等。例如,我了解SOLID原则,DDD的一些主要思想,例如聘请领域专家的必要性,开发无处不在的语言等。我敢说我的理论背景至少合理。 但是,当谈到练习时,我觉得自己是一场灾难。前一段时间,我需要继续开发已经由其他人开发的金融系统。这就是用C#和WinForms开发的那种“旧系统”。这是我第一次选择一个具有实际领域复杂性,业务规则等等的项目。 我承认,当我大多数时候收到要求时,我认为“这到底是怎么做的?” -我什至不知道如何开始着手研究需求以弄清楚必须做什么。我认为我的主要困惑是我必须编写什么代码,什么类,接口以及每条逻辑的去向,每件事必须在哪个类上。问题是我不知道从哪里开始。 大多数时候,经过很多思考,我最终想到了一些主意,但是我却永远不知道如何判断我的主意是否正确。 我的意思是我不认为这是一种理论上的不足,因为我说我已经阅读了有关软件体系结构和面向对象的一堆建议,但对确定实践中必须做的工作并没有多大帮助。 所以,我怎么能学会真正 做到面向对象的设计?我要学习的是:给定的需求知道如何开始在一个过程中进行工作,从而找出必须完成的工作以及每个代码所属的位置。我还如何学习判断我的想法是否正确? 我相信在这里不可能完全解释这一点作为答案。但是,我所寻找的可能是根据网站样式而定的答案,只是给出概述并指出一些参考资料(书籍,在线课程等),这些参考资料可用于扩展思想并真正学习这些知识。

3
了解助焊剂模式
我实际上正在研究流量模式,关于商店我有些不了解。 他们到底是什么? 我已经阅读了许多文章,似乎与该领域有关。 这是否意味着这是与api调用或后端调用相关的“抽象”部分? 对我来说不是很清楚。 编辑:可能与角度工厂相同吗?获取远程数据,执行业务任务或存储某些应用程序状态(例如,当前连接的用户)?

2
鲁棒性和容错能力有什么区别?
系统/程序/分布式算法/ ...通常以谓词鲁棒或容错来描述。 有什么区别? 细节: 当我用Google搜索+健壮的+“容错”功能时,我只有两次点击,都无济于事。 当我用谷歌搜索术语时,我发现很多论文的标题中都有两个术语。不幸的是,它们并没有精确地定义术语:(但是由于它们同时使用了这两个术语,因此似乎没有一个暗示另一个。

1
功能反应/关系编程–有区别吗?
我一直在使用Reactive Cocoa(由GitHub提供),这是一种用于Cocoa库的功能性反应式编程API,现在已经使用了一段时间,但是我刚刚阅读了“ Out of the Tar Pit”,据称该论文介绍了其背后的概念,我有些困惑。 本文介绍了(据我所知)功能关系编程,其中数据之间的关系是由FRP系统应强制执行的条件创建的,以减少所需的“偶然”逻辑和状态。 我的问题是,这两个概念-FR(eactive)P和FR(elational)P本质上是同一件事(前者只是后者的实现),还是两者之间存在核心区别?不幸的是,目前我对该领域的了解还不足以让我足够区分它们。 如果存在差异,顾名思义,这似乎与数据更改有关系。当然,反应性可可粉(和C#中的Rx)具有创建信号的概念,该信号在数据变化时触发,并且可用于随时间连续修改值。 这有区别吗?如果没有,那是什么? (请原谅不良标签,我找不到相关标签,也无法创建它们-如果可以的话,请将标签更新为更合适的标签。)

3
应该通过自动UI测试来测试哪些功能?
最近,我们有一位顾问告诉我们,如果某个功能只能通过自动UI测试(例如Selenium,编码UI)进行测试,则存在基础架构问题。虽然这种说法可能有点极端,但它与测试金字塔的思路相同,因为UI测试应占整个自动化测试套件的一小部分。 那么,哪些类型的功能应该进行自动UI测试?具有令人信服的体系结构的系统是否仍具有只能通过UI测试才能验证的功能,或者这些测试应仅用作一组单元和服务测试的“备份”?

3
IValidaableObject与单一责任
我喜欢MVC的可扩展性,它允许视图模型实现IValidatableObject,并添加自定义验证。 我尝试使我的控制器保持精简,使此代码成为唯一的验证逻辑: if (!ModelState.IsValid) return View(loginViewModel); 例如,登录视图模型实现IValidatableObject,通过构造函数注入获取ILoginValidator对象: public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } 似乎在视图模型中注入实例的Ninject并不是真正的惯例,甚至可能是反模式? 这是一个好方法吗?有更好的吗?

2
如何使这种设计更接近适当的DDD?
我已经读了几天DDD,并且需要有关此样本设计的帮助。当不允许域对象向应用程序层显示方法时,DDD的所有规则使我非常困惑应该如何构建任何内容。还有什么地方可以协调行为?不允许将存储库注入实体,因此实体本身必须在状态下工作。然后,一个实体需要从域中了解其他信息,但是其他实体对象也不被允许注入?这些事情中有些对我有意义,而另一些则没有。我还没有找到很好的例子来说明如何构建整个功能,因为每个例子都与订单和产品有关,一遍又一遍地重复其他例子。通过阅读示例,我学得最好,并且尝试使用到目前为止所获得的有关DDD的信息来构建功能。 我需要您的帮助来指出我做错了什么以及如何解决,最好是使用代码,因为在已经模糊定义所有内容的情况下,很难理解“我不会建议做X和Y”。如果我无法将一个实体注入另一个实体,则更容易了解如何正确地进行操作。 在我的示例中,有用户和主持人。主持人可以禁止用户,但有一条商业规则:每天仅3个。我尝试建立一个类图以显示关系(下面的代码): interface iUser { public function getUserId(); public function getUsername(); } class User implements iUser { protected $_id; protected $_username; public function __construct(UserId $user_id, Username $username) { $this->_id = $user_id; $this->_username = $username; } public function getUserId() { return $this->_id; } public function getUsername() { return $this->_username; } …

6
“单页网络应用程序”的体系结构指南
我将开始一个辅助项目,以构建“单页” Web应用程序。该应用程序需要是实时的,并在发生更改时将更新发送给客户端。 对于此类应用程序的体系结构,是否有最佳实践方法的良好资源?到目前为止,我发现的最佳资源是trello体系结构文章,网址为:http ://blog.fogcreek.com/the-trello-tech-stack/ 对我来说,这种架构虽然很性感,但可能针对我的特定需求进行了过度设计-尽管我确实有类似的要求。我想知道是否需要打扰服务器端的sub / pub,是否可以在发生某些情况时(例如,当客户端将更新发送到服务器,将更新写入数据库时​​,然后将更新发送给客户端)。 从技术上讲,尽管架构指南在某种程度上应适用于任何基础服务器技术,但我可能希望在Node.JS或Ruby中进行构建。

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.