Questions tagged «design»

有关通过软件设计解决问题和计划解决方案的问题。

4
为什么许多设计会忽略RDBMS中的规范化?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我看到很多设计都认为标准化不是决策阶段的首要考虑。 在许多情况下,这些设计包括超过30列,主要方法是“将所有内容放置在同一位置” 根据我记得,归一化是最重要的第一件事,那么为什么有时它这么容易掉下来? 编辑: 好的建筑师和专家选择非规范化的设计,而没有经验的开发人员选择相反的设计,这是真的吗?反对着手规范化设计的观点是什么?

6
UML类图是否足以设计JavaScript系统?
鉴于UML面向面向对象的更为经典的方法,它仍然可以以可靠的方式用于设计JavaScript系统吗? 我可以看到的一个具体问题是,实际上,类图是系统的结构化视图,而JavaScript是更多由行为驱动的,那么如何处理呢? 请记住,我在这里不是在谈论真实世界;这是我要实现的解决方案的模型。

8
如何确定数据对象类型是否应设计为不可变的?
我喜欢不可变的“模式”,因为它的优点,在过去,我发现设计具有不可变数据类型(某些,大多数甚至全部)的系统是有益的。通常,这样做的时候,我发现自己编写的bug更少,调试起来也容易得多。 但是,我的同龄人通常会避开一成不变。它们一点也不缺乏经验(远非如此),但是它们以经典的方式编写数据对象-私有成员,每个成员都有一个getter和setter。然后通常他们的构造函数不带参数,或者为了方便起见可以带一些参数。很多时候,创建对象是这样的: Foo a = new Foo(); a.setProperty1("asdf"); a.setProperty2("bcde"); 也许他们到处都这样做。也许他们甚至都没有定义使用这两个字符串的构造函数,无论它们多么重要。也许他们以后不再更改这些字符串的值,并且永远不需要更改。显然,如果这些事情是对的,那么将对象更好地设计为不可变的,对吗?(构造函数具有两个属性,根本没有二传手)。 您如何确定对象类型是否应设计为不可变的?有很好的判断标准吗? 我目前正在讨论是否将自己项目中的某些数据类型切换为不可变,但我必须将其证明给同龄人,并且这些类型中的数据可能会(很少)更改-那时您当然可以更改这是一成不变的方法(创建一个新方法,从旧对象复制属性,但要更改的属性除外)。但是我不确定这仅仅是我对不可变事物的热爱,还是对它们的真正需求。

8
是否有用于命名类型的良好技术或测试?
一个尴尬,开放的问题,但这是我一直碰到的问题: 易于维护和使用的软件是经过精心设计的软件。试图使设计更直观意味着对组件进行命名,以使下一个开发人员应该能够推断出组件的功能。这就是为什么我们不将类命名为“ Type1”,“ Type2”等的原因。 当您对现实世界的概念(例如客户)进行建模时,这通常就像在对现实世界的概念进行建模后命名类型一样简单。但是,当您构建面向系统的抽象事物时,很容易用尽易于理解和消化的名称。 当尝试使用基本类型或接口描述组件的类型(而不是它们的工作方式)来命名类型系列时,对我来说,情况变得更糟。这自然导致每种派生类型试图描述实现的风格(例如IDataConnection,SqlConnection在.NET Framework中),但是如何表达复杂的内容,例如“通过反射工作并寻找一组特定的属性”呢? 然后,当你终于选择了一个名字,你觉得类型描述什么它试图做,你的同事问:“跆拳道这是否DomainSecurityMetadataProvider实际上做什么? ” 是否有任何好的技术来为组件选择一个好记的名称,或者如何在不弄乱名称的情况下构建一组组件? 我可以对名称进行任何简单的测试,以更好地了解名称是否为“好”,并且对其他人应该更直观吗?
23 design  naming 

11
在Bank world中选择代码设计工作或懒惰
我在一家出色的投资银行工作了两年。 我进行了一些技术项目,希望创建最优化的代码,同时尊重适应的良好设计模式,SOLID原则,demeter规律并避免各种重复的代码... 当生产交付=>零错误时,一切都按预期进行。 但是,大多数开发人员来找我是为了使我的所有代码过于复杂以至于无法理解阅读。我听了一个例子:“做一些if和instanceof,忘记多态性,这样很容易纠正紧急生产错误”。我不想回答…… 知道这些开发人员一点也不好奇,拒绝努力理解一个好的设计(例如,90%的开发人员不知道什么是策略模式,并且编写过程代码,并且从不进行设计,因为他们说,他们很简单) ),我的项目经理告诉我,我对银行世界的看法确实是错误的,而且过于理想化。 你会建议我什么?我要重申的是,我是否真的希望真正好的代码,或者让我适应大多数开发人员,对于我来说,重复设计代码对我而言,这并不是真正有趣的设计代码,而是我们开发人员工作的全部美。 或者相反,他们是否应该学习基本的面向对象原则和最佳实践以适应我的代码?

9
委托与接口-还有更多可用的说明吗?
在阅读了《 何时使用委托代替接口》(《 C#编程指南》)一文之后,我需要一些帮助来理解以下给定的要点,我发现这些要点不太清楚(对我而言)。有任何示例或详细说明吗? 在以下情况下使用委托: 使用事件设计模式。 期望封装静态方法。 需要容易的组成。 一个类可能需要该方法的多个实现。 在以下情况下使用界面: 可以调用一组相关方法。 一个类仅需要该方法的一个实现。 我的问题是 事件设计模式意味着什么? 如果使用委托,组成如何变得容易? 如果有一组相关的方法可以被调用,那么使用接口-它有什么好处? 如果一个类仅需要该方法的一个实现,请使用接口-这样做有何好处?
23 c#  design  .net 

12
在关系数据库中存储xml有什么优势?
我AdventureWorks数据库今天闲逛,我注意到,一些表(HumanResources.JobCandidate并 Sales.Individual举例)具有被存储XML数据的列。 我要知道的是,基本上将数据库表行的数据存储在另一个表的列中的优点是什么?这是否使查询这些信息变得困难?还是假设不需要查询数据而只需要存储数据?
23 design  database  xml 

10
创建需求文档的正确方法是什么?
现在,我的主管正在使用错误跟踪软件为我创建需求文档/规范。对我来说,这似乎是一个可怕的主意,所有要求都在这些小票上,我必须单击该愚蠢的网络表单才能了解这些要求。什么是针对需求/软件规格的理智的软件解决方案? 明确地说,我正在构建具有许多功能的大型软件组件,并且这些功能已在此BugTracking软件中阐明。

1
拆分一个大项目以创建一个多模块Maven项目
我正在开发一个Spring-MVC应用程序,其中我们使用Maven进行依赖项管理。由于项目规模很大,我们正在考虑将项目分为几个部分。我有一些疑问,希望能在这里得到答案。 当前,我们正在ROOT.war服务器上的Apache tomcat上部署单个WAR文件。由于项目规模很大,因此Web应用程序中包括通知和电子邮件,第三方服务,PUSH(Cometd),REST API等组件。目前,它们都是相互依存的,相互依赖。例如,Notification对象也取决于Person对象,因为通知是为用户量身定制的。 拆分大项目的主要目的是能够在单个模块上工作,进行错误修复,添加功能,进行测试等。如果满意,则只能在服务器上替换此模块,而不是整个应用程序。这可能吗? 如前所述,对象之间存在依赖关系和映射。如何在不同的子模块之间进行管理,或者只是将import语句更改为包括其他项目? 如我所说,其目的是在单个模块上工作并能够部署它们(最好是热的)。目前,我们只有一个WAR文件,如ROOT.war。拆分会创建多个war文件,然后将其称为URL domain-name.com/module_name/some_mapping吗? 我目前正在检查文档,但这是我们要使用Maven提供的多模块要实现的主要目标,并且想知道这是否可行。如果需要更多信息,请告诉我。 目前,我正在使用Spring的父POM,如下所示: <parent> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>1.1.3.RELEASE</version> <relativePath /> </parent>

9
在编码和维护期间写下笔记,思想,算法,决策是否正常/可以接受?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 有些人有这个问题,他们一言不发。写下他们的想法和决定是最有效的方法。 那么-在编码过程中在一些Notepad ++文件中写下我的想法和决定是否正常并且可以接受? 有时应该是可以接受的,例如在重新创建技术文档或对更复杂的算法进行推理时,但是有时可能很奇怪,例如当我在考虑设计选项并试图做出判断时。 这种做法对生产率的影响尚不清楚。从一方面来看,使用内在单词的推理可能比使用书面单词的推理更快。另一方面,更复杂的问题需要编写。此外,如果人们坚持使用更多的设计选项,那么在撰写决策时感觉会更好,因此鼓舞士气。

7
结对编程可能有哪些缺点?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 结对编程在当今非常有名。 它具有以下优点: 错误较少的程序。 后期制作维护成本要少得多。 既定的做法受到挑战,导致出现新的想法。 程序员可以互相学习。 程序员发展软技能。 但是结对编程的缺点是什么?

7
“ Set”是否应具有Get方法?
让我们拥有这个C#类(在Java中几乎相同) public class MyClass { public string A {get; set;} public string B {get; set;} public override bool Equals(object obj) { var item = obj as MyClass; if (item == null || this.A == null || item.A == null) { return false; } return this.A.equals(item.A); } public override int GetHashCode() …

1
设计可伸缩的消息队列体系结构
我最近开始学习可伸缩和企业计算机体系结构的细微差别,其中的核心组件之一是消息传递队列。为了从任何编程范例中学到最多的知识,我试图实现自己的消息传递队列服务版本。 到目前为止,我的最初设计是在线程套接字侦听器上运行的,但是为了防止同一消息被两个单独的处理节点下载两次,消息队列索引寄存器在启动读取时被锁定,并在该寄存器被锁定后解锁。更新。这样,就不需要对其进行线程化,并且意味着基于正在运行消息传递队列服务的服务器的处理速度,可伸缩系统的大小存在上限。 解决此问题的方法是在多个服务器上运行消息队列服务,但这将增加两次下载同一条消息的可能性。防止发生此类问题的唯一方法是包括一个撤消回调(该撤消回调(在服务器甚至单个服务器上的线程已同步其信息并检测到此类重新发布之后)将命令处理节点停止其运行。当前作业,然后重新查询消息队列以获取下一条消息,但是同样,还会有一个上限,在该上限中,大多数正在发送的流量将是同步和吊销回调,从而导致瓶颈并减慢了信息处理的速度,因此许多处理节点将执行空操作并浪费时间。 我能想到的解决此问题的最后一种方法是,使每个消息队列服务器(以及每个服务器上的每个线程)在队列中查找的位置具有特定的偏移量,但这可能会基于类型的应用程序,特别是如果要求以特定顺序进行处理时。 因此,话虽这么说,是否有任何消息队列体系结构设计可以向我展示现有的企业级消息队列服务如何避免这些问题?

10
工程过度是警告标志吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 因此,我们向具有明确定义要求的新候选人提出了直接的编码练习。有时,我们收到的解决方案并不能真正解决眼前的问题,而是过度设计以解决感知到的问题-通常不在练习范围之内。 现在我的问题是,这是一个警告信号吗? 编辑:相当多的讨论是基于有缺陷的测试-这是一个公平的观点。正如我在评论中所述,测试的基本前提是展示如何以一种明智的方式从文件中读取数据(并且您会惊讶于我们看到的各种方法),以及如何匹配计算更新之间的延迟之前的项目。现在,要使此方法起作用,必须对数据做出某些假设,我们将寻找这些假设,并且还明确声明我们希望在两小时内看到您采用的方法(包括OO方法等)。大体时间。 恕我直言,当我面试时,这是我遇到的最完整的练习。 我正在考虑的一种特殊情况是,候选人而不是从文件中读取多线程应用程序中的“网络”输入,这显然不在范围之内。

4
动态和静态语言之间的架构差异
在设计将基于静态语言(例如C#或Java)和动态语言(例如Ruby或Python)构建的应用程序时,在体系结构上是否存在重大差异? 哪一种设计可能对某一种类型是好的选择而对另一种却是不好的呢?一种类型可以实现任何其他类型都不能实现的有用功能(当然在设计和体系结构上)? 另外,是否有任何动态特定的设计模式?

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.