Questions tagged «architecture»

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

3
ASP.NET WebForms应用程序的最佳体系结构
我已经为客户端编写了一个ASP.NET WebForms门户。该项目是经过改进的,而不是从一开始就进行了适当的计划和组织。因此,所有代码都在同一项目中混在一起,没有任何层次。客户端现在对功能很满意,因此我想重构代码,以便对发布项目充满信心。由于似乎有许多不同的方法来设计体系结构,所以我想对最好的方法提出一些意见。 功能性 门户允许管理员配置HTML模板。其他关联的“合作伙伴”将可以通过向其网站添加IFrame代码来显示这些模板。在这些模板中,客户可以注册和购买产品。已经使用WCF实现了API,该API允许外部公司也可以与系统连接。管理员部分允许管理员配置各种功能并查看每个合作伙伴的报告。系统将发票和电子邮件通知发送给客户。 当前架构 它当前正在使用EF4读取/写入数据库。EF对象直接在aspx文件中使用。在我编写站点时,这促进了快速开发,但是像这样将它与UI紧密耦合在一起可能使它保持不可接受。特定的业务逻辑已添加到EF对象的部分类中。 问题 重构的目标是使站点可扩展,易于维护和安全。 哪种架构最适合此?请说明每层中应该包含的内容,是否应使用DTO的/ POCO / Active Record模式等。 是否有一种健壮的方法来自动生成DTO / BO,以便尽管有额外的层,也可以轻松实现将来的任何增强功能? 将项目从WebForms转换为MVC是否有益?

9
应该期望开发人员在实际程序之前编译内部库吗?
最近,与我合作的一位高级开发人员提出了一个要求开发人员获得最新版本并在其项目中编译一个主要内部库的理由。与此相反,相反的说法是,项目团队应该使用他们从内部Maven存储库中获得的稳定版本,开发人员认为开发人员认为在开发人员机器上拥有源代码可以节省时间,因为他们可以读取库源代码代码以确定所需的功能是否可用。 高级开发人员是否有有效论点?还是要求开发人员阅读库的源代码与封装的基本原理背道而驰,甚至将库放在首位?

4
调用外部命令行应用程序或内部化该应用程序的逻辑是更好的主意吗?
我有一个“管道”式的过程,该过程实质上只是将一堆现有工具链接在一起以使工作流自动化。对于其中一个步骤,有一个现有的命令行工具已经可以完成该步骤需要执行的操作。 外部CLI工具是基于Java的,我的管道也是基于管道的,因此可以将工具直接集成到管道步骤中,但是该工具非常复杂,目前与具有命令行输入密切相关(例如37个配置标志选项)。 问题是:简单地调用并调用外部过程是一个更好的主意,还是将外部代码集成到我的应用程序中会更好? 集成与调用外部过程的利弊是什么?

7
从架构到开发的过渡是否有最佳实践?
我们正在寻找改进从架构到开发的移交任务的过程。 在规模的一端,没有架构指南会让您冒险,每个开发人员都以自己的方式行事。 在规定了一切的规模的另一端,规范花费的时间比开发所需的时间长,您可能会面临非常无聊的开发任务。 有没有人在这些极端之间找到最佳的中间立场?您将哪些工件交付给开发人员?例如:模块,类结构或顺序图?

4
LINQ与数据访问层
我自学成才,始终在业务逻辑和UI代码的完全独立的“层”中处理任何数据访问代码。对于我而言,这一直是一个非常好的架构,并且我看到的任何“规则”或最佳实践仍设法适应这种编码风格,尤其是“ 单一责任原则”。 对于我的大多数家庭项目,我将使用自己创建的ORM,我一直打算将其制作为开源代码。但是从那时起,LINQ可用了,这与我的ORM的工作方式非常相似(但更好)。 我以前无法使用自己的ORM进行我现在无法使用LINQ进行的任何操作(REST集成的某些功能除外)。所以我的问题是;LINQ是我的新数据访问层吗?我是否需要此层了?我的BLL应该直接与LINQ对话吗?还是这种不良做法? 编辑: 最初的问题是指LINQ to Entities,但是有关LINQ to SQL的答案很多。人们对他们两个都有什么想法?我收集到的信息比LINQ to SQL不能真正替代DAL,但是可以使用实体框架吗?

1
多个Zend应用程序代码组织
在过去的一年中,我一直在研究一系列基于Zend框架的应用程序,并集中于一个复杂的业务逻辑,即所有应用程序即使不使用全部也必须具有访问权限(比每个应用程序具有多个库文件夹更容易)应用程序,因为它们都通过一个公共中心链接在一起)。 在不深入讨论项目具体目的的情况下,我正在寻找一些有关如何“分组”我的代码的输入(因为我正在单独处理项目)。我试图将其拆分为尽可能消除依赖项的方式。 我试图在逻辑上尽可能地保持分离,因此在12个月的时间内,其他任何人都可以毫无疑问地扩展我的作品。 示例结构: applicationStorage\ (contains all applications and associated data) applicationStorage\Applications\ (contains the applications themselves) applicationStorage\Applications\external\ (application grouping folder) (contains all external customer access applications) applicationStorage\Applications\external\site\ (main external customer access application) applicationStorage\Applications\external\site\Modules\ applicationStorage\Applications\external\site\Config\ applicationStorage\Applications\external\site\Layouts\ applicationStorage\Applications\external\site\ZendExtended\ (contains extended Zend classes specific to this application example: ZendExtended_Controller_Action extends zend_controller_Action ) applicationStorage\Applications\external\mobile\ …

2
命令处理程序和DDD
我有一个ASP.NET MVC应用程序,该应用程序使用查询服务来获取数据,并使用命令服务来发送命令。我的问题是关于命令部分的。 如果有请求进入,则命令服务将使用命令调度程序,该命令调度程序会将命令路由到其指定的命令处理程序。该命令处理程序首先验证命令,如果一切都可以接受,它将执行命令。 具体示例:AddCommentToArticleCommandHandler接收一个AddCommentToArticleCommand,该命令具有ArticleId,CommentText和EmailAddress。 第一; 必须进行验证,例如:-检查文章是否存在-检查文章是否未关闭-检查注释文本是否在20到500个字符之间,以及是否填写了电子邮件地址-检查电子邮件地址是否具有正确的格式。 我想知道将验证放在哪里? 1 /在命令处理程序本身中。但是,它不能在其他命令处理程序中重用。 2 /在域实体中。但是,由于域实体不了解存储库或服务,因此它无法执行所需的验证(无法检查文章是否存在)。但是另一方面,如果实体不包含逻辑,则它将变成一个简单的数据容器,不遵循DDD原理。 3 /命令处理程序使用验证器,以便可以在其他命令处理程序中重用验证。 4 /其他机制? 我正在寻找此特定示例的责任链,以及哪些对象(实体,存储库,...)在其中起作用。 从命令处理程序到存储库,您是否有实现此想法的想法?

3
支持多租户
将单租户应用程序转换为多租户应用程序时会遇到哪些典型挑战?安全性和数据隔离使我感到最重要。还有什么? 我是从事相当大的自动化工作的架构师之一,从历史上看,这只是我们公司在使用它。我们希望其他人也可以使用它。每次我们谈论“使其成为多租户”时,讨论都围绕使一个租户的用户远离另一租户拥有的数据,并确保拥有一个租户的用户不能(有意或无意)对另一租户产生影响租户的环境。我想知道的是,安全/数据隔离是否真的是这里唯一的主要问题,还是我们只是没有在考虑其他一些主要问题。

2
在设计应用程序各个部分之间的交互时需要建议
我正在尝试设计基于NetBeans Platform 7的Rich Desktop应用程序的“主要”类。该应用程序将使用HTTP服务,并通过TCP上的“推送系统”接收消息。 我们是3个开发人员,我们希望并行开发模块 应用程序将分层(数据,业务,演示) 我们将使用Presentation Model来分离职责 一些粒度数据(例如bean Person)将由多个屏幕共享(并且可能同时显示在多个屏幕上) ... 我们能够开发单个屏幕,但是我们不知道如何组织整个应用程序并定义每个模块的内容。 因此,您是否有任何建议(模式/最佳实践/书籍/示例应用程序)来协调/管理整个应用程序内部的交互? 关于如何定义模块内容的任何建议? 谢谢! 一个小例子来说明我要构建的内容:Foo用户管理应用程序 启动应用程序 在左侧的[explorer]中,我们有一个平台列表(列表存储在本地文件中) 在顶部,我们有一个添加新平台的按钮(也可以通过右键单击来使用) 通过在平台上双击,该应用程序将调用HTTP服务并检索用户的完整列表。此列表显示在[编辑器]中(在JTable中) 启动后台进程:通过TCP连接,我们收到消息 借助工具栏中的按钮,可以添加新用户 如果应用程序是在另一台PC上启动的,并且用户连接到同一平台,则其用户列表将动态更新(添加/删除/状态:{offline / online})(感谢消息) 将来会提供一个聊天模块。 我的问题是(换句话说):决定每个模块内容的任何建议/最佳实践?如果PM(演示模型)是分离视图/业务和数据并创建屏幕的好方法,那么基于PM链接多个屏幕的最佳方法是什么?假设我们开发了聊天模块,如何在右键单击用户列表的上下文菜单中添加条目“ Discuss with ...”?

6
我应该如何计划我的代码库?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 10个月前关闭。 我目前正在从事一个项目,该项目的代码行数将超过5,000行,但我从未真正想到过这个设计。我应该使用什么方法来构造和组织代码?纸和笔?UML图?还有吗
10 architecture  uml 

5
您如何在访谈中回答“解释项目的当前架构”问题?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我目前正在处理的应用程序有点庞大。15分钟左右无法解释。 上一次我最终绘制了一些类图以及它们之间的联系方式,但我可以看到面试官对答案不满意。 回答此问题时应重点突出哪些主要内容? 例如,如何管理会话,如何实现持久性是很少的事情。 还有哪些其他事情不容错过?


4
领域驱动设计中的重构
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 6年前关闭。 我刚刚开始从事一个项目,我们正在使用领域驱动的设计(由Eric Evans在“ 领域驱动的设计:解决软件核心中的复杂性”中定义。我相信我们的项目肯定是该设计的候选人就像埃文斯在书中描述的那样。 我在不断重构的想法中挣扎。 我知道在任何项目中重构都是必不可少的,随着软件的改变,重构将不可避免地发生。但是,根据我的经验,重构是在开发团队的需求发生变化时发生的,而不是对领域变化的理解(Evans称之为“重构以获得更大的洞察力”)。我最关心的是对领域模型的理解方面的突破。我知道进行小的更改,但是如果需要对模型进行较大的更改怎么办? 在说服更清晰的域模型之后,应该说服自己(和其他人)重构的有效方法是什么?毕竟,为了改善代码的组织或性能而进行的重构可能与无处不在的语言代码的表达方式完全不同。有时似乎没有足够的时间进行重构。 幸运的是,SCRUM使它可以进行重构。SCRUM的迭代性质使其易于构建一小块并进行更改。但是随着时间的流逝,该片段会变大,如果您在该片段太大而又难以更改时又取得突破,该怎么办? 是否有人从事采用领域驱动设计的项目?如果是这样,那么对此有所了解将是很棒的。我特别想听听一些成功的故事,因为DDD似乎很难解决。 谢谢!

2
在测试驱动的开发过程中,软件架构师的作用是什么?
据我了解,Test-Driven Development是关于编写测试以定义程序规范的(如果我错了,可以纠正我)。 如果有人负责编写软件的规范(包括公共API)(我们称他为Software Architect),这是否意味着Software Architect必须编写所有测试? 还是由软件架构师编写规范,然后将其交给开发人员编写测试依据? 还是通过允许所有开发人员编写自己的测试而使规范有机地增长,而忘记了拥有软件架构师?
10 architecture  tdd 

3
如何设计高可用性应用程序
当前,我们有一个经典的n层应用程序:DB / Web服务/前端。它具有其他组件,但这是基本布局。 我们要提高应用程序可用性的原因有3个: 我们的主机有时会遇到中断(就像它们一样),我们希望最大程度地减少对客户的影响,因此,例如,如果数据中心A关闭,他们将打开数据中心B。 升级版本时,我们会关闭站点进行维护,通常需要几个小时(迁移脚本等)。我们希望用户进行更无缝的过渡,并尽可能减少停机时间(他们在升级服务器A时使用服务器B)。 可选地,我们的客户遍布世界各地,尽管他们之间的联系不畅,我们希望他们能获得最好的体验(与印度开发人员合作的任何人都应该明白我的意思)。理想情况下,我们希望能够在其办公室中插入服务器(或使用其所在城市附近的数据中心),并将其无缝集成到我们的体系结构中。 我们远程不需要99%的可用性,甚至不需要95%的可用性。这是一个文档管理应用程序。没人在乎。但是,由于迁移可能需要一段时间,并且世界各地都有客户,因此有时我们会阻止客户在一天的大部分时间里工作。 对于SQL部分,即使没有“适当的” DBA,我们也了解SQL的可能性:复制,镜像等。在DB端,为此很容易找到资源。还有什么更困难的了:存储会话,代码等。如果我的Web服务服务器出现故障,我的UI如何知道它必须切换?我的会话如何在服务器之间持久化? 不幸的是,我们都没有这方面的经验,我们甚至都不知道从哪里开始。是否有最佳做法?设计模式?图书馆(应该是免费的,因为我们没有钱)? 我们使用的是ASP.Net和SQL Server,中间是WCF Web服务。我们有很多Windows服务,但它们不是关键任务,我认为处理网站的方法将适用于这些服务。 我知道大多数云平台都为此提供了内置系统,但是由于我们的系统管理员,云托管是行不通的,他想自己管理一切而不依赖任何人。

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.