Questions tagged «design»

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

5
函数可以修改参数吗
我们有一个包装Linq To SQL的数据层。在此数据层中,我们有此方法(简化) int InsertReport(Report report) { db.Reports.InsertOnSubmit(report); db.SubmitChanges(); return report.ID; } 在提交更改时,将使用数据库中的值更新报告ID,然后我们将其返回。 从主叫方看起来像这样(简化) var report = new Report(); DataLayer.InsertReport(report); // Do something with report.ID 查看代码,作为一种副作用,已经在InsertReport函数内部设置了ID,然后我们忽略了返回值。 我的问题是,我应该依靠副作用,而是做类似的事情。 void InsertReport(Report report) { db.Reports.InsertOnSubmit(report); db.SubmitChanges(); } 还是应该防止它 int InsertReport(Report report) { var newReport = report.Clone(); db.Reports.InsertOnSubmit(newReport); db.SubmitChanges(); return newReport.ID; } 甚至会 Report …

4
“ UML对MDD来说是最糟糕的事情。”为什么?
威廉·库克(William Cook)在一条推文中写道: “ UML对MDD来说是最糟糕的事情。幸运的是,现在许多人意识到了这一点…… ” 我想知道该说法背后的原因(显然,我不是在指他的个人观点)。 我注意到那里的许多人不太喜欢UML。同样值得一提的是,他在学术界,UML成为有效设计和建模的圣杯。
17 design  uml  mdd 

1
是否需要工厂类来创建视图模型?
我的一位同事建议在我们的ASP.NET MVC解决方案中使用工厂类创建视图模型对象。其想法是,它可以帮助我们的应用程序中构建视图模型的方式设计和可维护性。 我想找出是否有人对此有经验。我进行了一些研究,但在这种实践上发现得很少。 当前,我们在控制器级别创建viewmodel对象,例如 public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } 因此this.BuildIndexViewModel()负责创建viewmodel类(显然是:)。但是我们正在研究以下可能性: public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } 这是一个有趣的想法,但我不是100%相信。我对其他人对此的看法感兴趣。

7
是否有建立新框架的一般规则或最佳做法?
我需要开始设计和开发新框架,以便与开源ECM进行交互。这包括一个自定义的数据模型,以帮助网站开发人员与此ECM进行交互,因此他们无需关心节点操作的细节和其他低级细节。那只是一堆要开发的类和方法。 我对如何处理该项目的组织和管理有一些疑问:开发此类项目是否需要遵循一些一般规则,技巧,最佳实践或一些注意事项? 我确信框架或库的开发与应用程序之间会有一些区别。

9
如何将客户端从UI原型转移到一组实际需求?
假设您得到了一个由25个屏幕组成的应用程序视觉状态的模型。期望这足以使我们确信我们可以将其开发并作为最终应用程序移交给原始利益相关者或客户,他们将对此感到满意。自然,您最终将要再次向利益相关者询问很多用于UI的问题,这很浪费。 但是,我有很多次发现这还远远不够,在开发应用程序的过程中,由于我们正在复制一个接口,最终使客户不像他们最初看起来的那样满意,这一要求变得模糊不清当我们要求他们提供创建UI的所有信息时。 我只是不确定要提出什么要求,我试图做到具体,要求要求和对总体目标的理解,但是我不知道我应该提出什么要求。如果我现在才开始,那么重新散布导致进入UI的所有信息将浪费大量时间,在此阶段,客户最初失去的许多重要原因将丢失。 我如何让人们理解我们无法通过要求用户为我创建可操作的东西来锁定基于UI模型的需求? 为了正确执行为最终用户开发应用程序的任务,理想情况下从什么开始?

6
TDD:在第一次单元测试之前会发生什么?
我最了解TDD的理论,但我不知道如何开始。我坐下来为个人项目编写单元测试并意识到这一点。。。我不知道我要测试什么。什么对象,什么功能等 例如,假设我想编写一个应用程序来帮助我们的家人管理杂务。我想到了一些问题:如何从这个想法开始进行第一次测试?开始之前应该确定多少?开始编写测试后应该确定多少?什么时候做出诸如将数据存储在文本文件还是数据库中的决定?开始之前是否应该进行用户接受度测试?我应该设计UI吗?我应该有规格吗?(我确实意识到这些示例问题中至少有一些可能在“灰色区域”中)。 除了有关进行第一个单元测试的标题问题之外,您还可以举一个例子说明一个示例项目的项目的第一个单元测试是什么样的吗?
17 design  tdd 

5
在开始开发项目之前要计划什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 假设我已经从客户那里收到了一个项目的规范,现在是时候开始开发它了。通常,我只是从第一个模块开始(通常是用户注册),然后从一个模块进入下一个模块。我只是在即将开始模块工作之前就在脑海中计划,但在此之前没有任何计划。 但是,我认为最好在编写代码之前仔细阅读规格并计划系统的工作方式,例如主要组件是什么,它们将如何交互等。我只是不确定我应该怎么计划。 为了更好地了解我的要求,我应该如何- a)将项目分为几个部分, b)计划他们的交互,例如我应该做类图,编写单元测试等吗? 有任何想法吗?

6
此时,Java的公共领域是否只是一个悲剧的历史设计缺陷?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 在这一点上,Java似乎是正统的,基本上不应将公共字段用于对象状态。(我不一定同意,但这与我的问题无关。)考虑到这一点,可以说从今天开始的今天,很显然Java的公共领域是语言设计的错误/缺陷?还是有一个合理的论据,即使在今天,它们仍然是语言的有用和重要的一部分? 谢谢! 更新:我知道更优雅的方法,例如C#,Python,Groovy等。我不是直接在寻找这些示例。我真的只是想知道是否还有人在掩体深处,喃喃地谈论着真正的公共场所有多美妙,群众如何全都是羊,等等。 更新2:显然,静态的最终公共字段是创建公共常量的标准方法。我指的是将公共字段用于对象状态(甚至是不可变状态)。我认为应该将公共字段用作常量而不是状态,这似乎是一种设计缺陷,一种语言的规则应自然而然地通过语法而不是准则来强制执行。

18
您首先看什么:代码还是设计?
如果您刚刚被介绍到一个新项目中,那么想要了解其工作原理的第一件事是什么? 您首先寻找设计吗?如果有设计,您会在其中寻找什么?类图或部署图或序列图还是其他? 还是直接输入代码?如果是这样,您如何理解不同层之间的相互作用?

2
多层体系结构:应该在哪里实施错误记录\处理?
我目前正在重构具有多层体系结构的大型子系统,并且正在努力设计一种有效的错误记录\处理策略。 假设我的架构包含以下三层: 公共接口(即MVC控制器) 域层 资料存取层 我的困惑源是我应该在哪里实施错误日志记录\处理: 最简单的解决方案是在顶层(即Public Interface \ MVC Controller)实现日志记录。但是,这感觉不对,因为这意味着将异常遍历不同的层,然后将其记录下来。而不是将异常记录在源头。 从源头记录异常显然是最好的解决方案,因为我掌握了最多的信息。我的问题是,如果不捕获所有异常,就无法在源头捕获每个异常,并且在域/公共接口层中,这将导致捕获已被下面的层捕获,记录和重新抛出的异常。 另一种可能的策略是#1和#2的混合使用。因此,我在最有可能引发异常的层上捕获了特定异常(例如,SqlExceptions在数据访问层中捕获,记录和重新抛出异常),然后在顶层记录了任何其他未捕获的异常。但是,这还需要我在顶层捕获并重新记录每个异常,因为我无法区分已记录\处理过的错误与未记录过的错误。 现在,显然这是大多数软件应用程序中的问题,因此必须有一个解决该问题的标准解决方案,以使异常在源头被捕获并记录一次。但是我自己却看不到该怎么做。 请注意,该问题的标题与“ 在多层应用程序中记录异常 ”非常相似,但是该帖子中的答案不够详细,不足以回答我的问题。

4
在一处管理客户端和服务器端验证
我在船上100%与1的情况应该 肯定使用了客户端和服务器端的数据验证。 但是,在我工作过的框架和环境中,我见过的方法从来都不是DRY。大多数情况下,没有计划或模式-验证写在模型规范中,而验证则写在视图上的表单中。(注意:我大部分的第一手经验是使用Rails,Sinatra和带有jQuery的PHP) 考虑一下,创建一个生成器似乎并不困难,只要生成一组验证(例如,模型名称,字段,条件),就可以生成必要的客户端和服务器端材料。或者,这种工具可以接受服务器端验证(例如validatesActiveRecord模型中的代码),并生成客户端验证(例如jQuery插件),然后将其应用于表单。 显然,以上只是“嘿,我有这个主意”,而不是正式的建议。这种事情肯定比这个主意击中时看起来要困难得多。 这使我想到一个问题:您将如何设计一种“一次写入,在服务器和客户端上运行”的数据验证技术? 相关子主题:是否存在针对任何特定框架或客户端服务器技术的类似工具?尝试仅维护一组验证有哪些主要难题或挑战?

5
MVC:控制器是否违反了单一责任原则?
单一责任原则指出“班级应该有一个改变的理由”。 在MVC模式中,Controller的工作是在视图和模型之间进行中介。它为View提供了一个界面,以报告用户在GUI上进行的操作(例如,允许View调用controller.specificButtonPressed()),并且能够在Model上调用适当的方法,以操纵其数据或调用其操作(例如model.doSomething()) 。 这意味着: 控制器需要了解GUI,以便为“视图”提供合适的界面来报告用户操作。 它还需要了解模型中的逻辑,以便能够在模型上调用适当的方法。 这意味着有两个更改的原因:GUI的更改和商务逻辑的更改。 如果GUI发生更改,例如添加了新按钮,则控制器可能需要添加新方法,以允许视图报告用户对该按钮的按下情况。 而且,如果模型中的业务逻辑发生了变化,则控制器可能必须进行更改才能在模型上调用正确的方法。 因此,控制器有两个可能的变化原因。它会破坏SRP吗?

4
Java-拥有完全静态的类是一个坏主意吗?
我正在一个更大的单独项目中工作,并且现在有几个类,在这些类中我看不到创建其实例的任何理由。 例如,我现在的骰子类静态地存储其所有数据,并且其所有方法也都是静态的。我不需要初始化它,因为当我想掷骰子并获得新值时,我只是使用Dice.roll()。 我有几个类似的类,它们只有一个这样的主要功能,我将开始研究一种“控制器”类,它将负责所有事件(例如,玩家移动时以及当前的转弯方向)是的),而且我发现我可以针对这一堂课遵循相同的想法。我从来没有打算为这些特定的类创建多个对象,因此使它们完全静态将是一个坏主意吗? 我想知道当涉及到Java时,这是否被视为“不好的做法”。从我所看到的,社区似乎在这个话题上有些分歧?无论如何,我希望对此进行一些讨论,并且与资源的链接也很棒!

5
随着更具表现力的编程语言的发展,对软件设计规范的需求是否大大减少了?
对于许多IT人员(包括几年前的我自己),理想的软件开发过程是在编写一行代码之前,先创建带有许多UML图的详细设计文档。(这看起来像是瀑布模型的描述,但与敏捷相同,只是迭代次数较小。) 在过去的两三年中,我完全改变了主意。我仍然认为,带有相关测试用例的详细需求规范绝对是必不可少的。对于大型项目,在开始编写代码之前,我还需要概述总体体系结构。但是所有其余的都应该尽可能地用代码完成。在理想情况下,除了代码本身外,不应该对软件设计进行任何描述。 我是如何得出这个结论的?以下是一些参数: 反馈 用于编写文档或创建图表的工具几乎没有反馈。是的,有些建模工具可以对UML图进行一些一致性检查,但是它们是有限的,并且会产生大量开销。 没有反馈,很难识别和修复错误。 编写代码后,您将获得大量反馈,例如: 来自编译器的错误和警告 静态代码分析结果 单元测试 错误可以快速识别并解决。 一致性 为了确保代码与您的文档一致,您必须一次又一次地检查。如果经常进行更改,则很难使代码和文档保持同步。 重构 有许多强大的工具和技术可用于重构代码,而重构文本描述或图表通常很困难且容易出错。 进行这项工作有一个先决条件:代码必须足够容易阅读和理解。这可能无法用Assembler,Basic或Fortran来实现,但是现代语言(和库)更具表现力。 因此,如果我的论点是正确的,则应该有一个趋势,即越来越少的轻量级软件设计规范和文档。这种趋势是否有任何经验证据?

5
公共图书馆是个好主意吗?
我一直认为“公共库”是个好主意。我的意思是说,该库包含一些不同应用程序经常需要的通用功能。这样可以减少代码重复/冗余。 我最近读了一篇文章(现在找不到),说这实际上是个坏主意,甚至说这是“反模式” 虽然这种方法有好处。版本控制和变更管理意味着对使用此库的一组应用程序进行回归测试。 对于我的新(Golang)项目,我有些陷入困境。多年来,重复数据删除技术已深深扎根于我,但我觉得这次应该尝试一下。 在撰写本文时,我开始认为这种“通用库”方法是对体系结构进行浏览的结果?也许我的设计需要更多思考? 有兴趣听到想法。
16 design  go 

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.