Questions tagged «design»

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

4
快速原型制作和重构
有时候,当我开始一个小项目(例如android应用)时,我不知道哪种方法最终会成功,而我只是尝试一种方法并尝试一下。但是,如果我以前从未使用过这种方法(对于我以前从未编程过的某种应用程序),那就像步入未知领域。我不知道要使用哪个库(也许我必须尝试几个库),而且有太多未知数(例如:如何在android中获取原始音频数据) 因此,我的开发过程如下: 编写一段代码,看看这种方法是否有机会。(方法越不确定,代码就会变得越丑) 如果可行,请进行大量重构,直到美观为止 如果我现在详细计划软件设计,那可能会浪费时间,就像计划没有地图的旅程一样。 这是敏捷开发的一部分吗?您如何处理软件开发中的未知领域?

4
通过伪编码进行软件设计?
您知道使用基于伪代码的方法设计(即写下)软件的好方法吗? 我是软件设计的新手,并阅读了一些有关UML的信息。到目前为止,我的谦逊的类层次结构还不错,但是,当事情变得复杂之后,我注意到通过“全面了解”,我可以使用其他结构来实现更高的可扩展性。由于Python可以很好地进行原型制作,所以我刚开始写就可以了,但是还不够。 所以我尝试了UML类图,但是它们似乎并没有太大帮助。我在那里解决的问题在脑海中微不足道。但是,一旦我开始对实际方法进行伪编码,我确实注意到了其他设计要求。 因此,如果您想通过伪代码进行设计,您将如何做?我相信对我来说,一种与代码大致一对一的方法效果最好。但是大多数UML软件甚至都没有显示该方法的代码(与GoF中的图片相反)。 有人声称UML仅用于文档和演示,对设计不是那么好吗?我也有这种感觉。我一直以纯粹的UML和一些简单的白板草图为设计软件的方式,直到谷歌搜索我找到Envision APDT为止。 那么,敏捷开发是我应该关注的东西吗?还是他们会随机称其为敏捷-我认为敏捷仅与计划有关?还是我设计不正确(使用UML)-有人通过伪代码进行设计吗?我如何找到一个好的工具?
9 agile  uml  design 

7
专业软件开发团队如何处理非平凡项目中的设计复杂性?
首先,我意识到这个问题可能会有些冗长和含糊,为此我深表歉意。对于任何“了解它”的人来说,这可能是一个简短的基本问题,但由于我发现自己在这方面缺乏经验,因此请在描述问题时请多多包涵。 从我11岁左右开始,我就一直以这种方式进行编程。这意味着我从一开始就一直在教自己。我接受了技术教育,但并非严格地学习计算机科学(我获得了光子工程学学位)。我们当然有编程课程,但这对我来说基本上是基本的东西,我没有学到很多新东西。我一直在为自己的快乐而进行自我教育,并且一直知道自己会从事编程事业,但是那时我的所有项目都还很小。我毫不费力地将它们牢记在心并加以维护。 现在,我发现自己是团队的领导者,而不是公司环境的领导者-我在大学工作,开发用于工程应用的科学软件(C ++)。突然间,这个项目正在(相对)变大,而且我大部分时间都无法解决这个问题。我主要在两件事上浪费了很多时间和精力: 当我不得不返回一段时间未使用的代码时,我很难记住它是如何工作的。我花了很多时间来查看相关类的头文件,并阅读在源文件中放置的注释。我希望我可以瞥见某种形式的“示意图”并更轻松地重获图片。 当我引入更改时,有时我会中途意识到,我试图做的事情会破坏其他地方的功能(或更糟糕的是,它只会在运行时显示出来,这是一个惊喜)。我还原并开始以不同的方式进行操作,结果发现我忽略了对其他组件的影响。我希望有一些“架构图”,在其中可以看到事情的完成方式,我要尝试做的事情将如何影响其他组件,以及为我提供一种在开始实施更改之前进行详细规划的方法。 与我一起工作的大多数人都有与我自己相似的故事-较强的技术导向,有时甚至是高超的技巧,但无法组织工作。但是,他们的项目通常比我的项目小得多,所以他们可以应付。无论如何,这对我来说意味着我一个人,没有人可以学习良好的做法。 我修了一个管理IT的研究生课程,尽管我觉得它很令人满意,但它主要针对非程序员,有关项目管理方法论,预算/进度估计,企业体系结构的教学,而不是软件设计和规划。没关系,我也在尝试学习这些东西。当然,引入了一些工具(例如UML)和软件开发过程的类型(级联,迭代,敏捷...),但是显然没有详细介绍,我很难决定我应该选择和使用的东西(以及达到什么程度)。 我一直在阅读有关SO上软件设计的许多问题和答案-有很多关于使用这种工具或特定工具或方法进行设计的问题,并且如果我确信UML文档可以解决我的问题-我会选择并开始使用它。但是有些人发誓,其他人则说它没用。我正在寻找更高层次的抽象的答案-有解决我所遇到的两个问题的方法吗,您个人怎么做?我应该学会什么才能做到这一点,而不必局限于某个特定工具?这些有时会变得过时,我希望它们的适用性会因项目类型而异。 非常感谢您的阅读,我无法简要地说出我的意思(缺乏软件设计经验和词汇)。

6
解析文件的最佳方法
我正在尝试寻找一种更好的解决方案,以对其中一些著名的文件格式进行解析,例如:EDIFACT和TRADACOMS。 如果您不熟悉这些标准,请查看Wikipedia的以下示例: 参见以下有关用于回答产品可用性请求的EDIFACT消息的示例:- UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+++++++DA' UNT+13+1' UNZ+1+1' UNA段是可选的。如果存在,它将指定将用于解释消息其余部分的特殊字符。UNA后面有六个字符,顺序如下: 组件数据元素分隔符(在此示例中:) 数据元素分隔符(此示例中的+) 十进制通知(此示例中的。) 释放字符(此示例中的?) 保留,必须为空格 段终止符(此示例中的') 如您所见,这只是一些以特殊方式格式化的数据等待解析(非常类似于XML文件)。 现在我的系统是建立在PHP之上的,并且我能够为每个段使用正则表达式创建解析器,但是问题不是每个人都能完美地实现标准。 一些供应商倾向于完全忽略可选的细分市场和领域。其他人可能选择发送比其他人更多的数据。这就是为什么我不得不为段和字段创建验证器以测试文件是否正确。 您可以想象我现在正在遇到的正则表达式的噩梦。另外,每个供应商都需要对正则表达式进行很多修改,我倾向于为每个供应商构建一个解析器。 问题: 1-这是解析文件(使用正则表达式)的最佳实践吗? 2-是否有更好的解析文件的解决方案(也许那里有现成的解决方案)?它能否显示缺少的段或文件已损坏? 3-如果仍然要构建解析器,应该使用哪种设计模式或方法? 笔记: 我读过有关yacc和ANTLR的文章,但不知道它们是否符合我的需求!

4
GUI编程的Signals + Slots模型是否有其他实用选择?
如今,大多数GUI工具包都使用Signals + Slots模型。没错,是Qt和GTK +率先提出的。 您知道,小部件或图形对象(有时甚至是未显示的小部件)将信号发送到主循环处理程序。然后,主循环处理程序调用为该小部件/图形对象分配的事件,回调或插槽。virtual工具包通常已经提供了默认的(大多数情况下)事件处理程序来处理所有预定义的信号,因此,与以前的设计不同,开发人员必须自己为每个消息编写整个主循环和处理程序。 (例如WINAPI),开发人员只需要担心实现新功能所需的信号。 据我所知,现在大多数现代工具箱都使用了这种设计。有Qt,GTK +,FLTK等。还有Java Swing。C#甚至具有它的语言功能(事件和委托),并且Windows Forms已在此设计上开发。实际上,在过去的十年中,这种用于GUI编程的设计已经成为一种不成文的标准。由于它提高了生产率并提供了更好的抽象。 但是,我的问题是: 对于现代GUI编程,是否有并行或实用的替代设计? 即信号+插槽设计是镇上唯一实用的设计吗?用任何其他设计进行GUI编程是否可行?是否有任何其他现代(最好是成功且流行的)GUI工具箱都基于替代设计?

4
从公共方法返回哈希表有什么问题,什么时候才有意义?
当您要返回多个项目而不是创建一个类并返回该对象时,从公共方法返回哈希表有哪些设计问题? 如果确实有问题,那么在什么情况下才有意义? 这个问题的答案如何根据语言是否动态而变化? 编辑:这是为了澄清键将是常量,并且是代码而不是数据的一部分。我们通常为之创建类的东西。问题是,如果创建类确实确实是正确的选择,那么为什么使用哈希表却会出错呢?

1
这是不好的设计吗?如何改善?
我前一阵子写了以下内容,但是最近我来回顾它,现在认为它不是一个好的设计。 该设计针对使用Entity Framework 4的一种模块化数据库层。有一个数据库对象,该对象从指定位置的外部库中(延迟地)加载实体框架上下文,并且所加载上下文的实例存储在哈希表中它们的名称(例如“ ContentMgmtContext”)。 该系统中与数据库的所有联系都是通过存储过程进行的。要调用数据库,查询方法签名如下所示: List<TReturn> Query<TReturn>(string Context, string Procedure, TransactionScope Scope, List<ObjectParameter> QueryParameters) 我喜欢这种模块化。但是,这种方法有一个明显的缺点:when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through …
9 design 

8
导致软件过度膨胀的原因是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 今天,我决定为Creative Sound Blaster驱动程序执行全新安装,因为它们总是在一段时间后开始出现故障。那意味着我必须经历整个清理过程。那花了我将近2个小时。 老实说,我看不出原因吗?尽管Creative(恕我直言)在生产永远无法工作的劣质软件方面绝对是第一名,但膨胀的问题并不仅仅局限于他们。 带有Canon数码相机驱动程序的PC将具有大约10种与各种连接互连的Canon条目。Visual Studio也是一个很好的例子,大约有50个左右的条目可以进行完整安装,并且只有通过完整安装才能修复该问题。当我从VS2k8升级到VS2k8SP1之类的东西时,它甚至破坏了整个操作系统的安装。事实证明5GB的可用空间不足以容纳300Mb的补丁... 因此,这似乎确实是一个普遍存在的问题。如今,几乎每个应用程序通常都包含解包程序,已安装的多个间谍“友人”,驱动程序通常在600Mb左右,包括打印机等的所有内容。 但为什么?是开发人员的错吗?诸如此类的应用程序是梦night以求的支持,如今它们永远无法100%正常运行,而且我所知道的几乎所有用户对于作为USB拇指驱动器/打印机/相机/声卡/浏览器的强制性驱动程序安装后所产生的所有膨胀都非常反感。 从我所知,例如Firefox安装,Nullsoft的NSIS似乎是唯一没有not肿的干净安装系统。干净,几乎基于xcopy的安装没有任何问题。 那么,为什么人们不使用植根于30层互连之上的简单设置和应用程序呢?是因为开发人员懒惰吗?使用代码生成工具?是因为公司强迫重量级应用程序成为用户会喜欢的东西吗?是什么原因造成的,有希望软件有一天能重返基础吗?从头启动新应用程序时,应采取哪些步骤来避免膨胀?

3
Git是如何设计的?
我的工作场所最近改用Git,我一直在(讨厌)它。我真的很喜欢它,它功能非常强大。我唯一讨厌的部分是有时功能过于强大(也许有点简洁/令人困惑)。 我的问题是... Git是如何设计的?只需短时间使用它,您就会感觉到它可以处理其他版本控制系统无法处理的许多晦涩的工作流程。但下面也感觉优雅。又快! 毫无疑问,这部分是莱纳斯的才能。但是我想知道,git的总体设计是基于某种东西吗?我已经阅读过有关BitKeeper的信息,但是有关技术细节的内容很少。压缩,图形,删除修订号,强调分支,隐藏,远程……所有这些都是从哪里来的? Linus真的把这个人赶出了公园,几乎是第一次尝试!一旦您超过了学习曲线,就可以很好地使用它。

8
重构或升级数据库以处理新功能
针对数据库模式问题的一些回答,建议使用一个附加表来规范不属于当前要求的功能的数据库(UserDepartment表允许员工/用户与他们可能在不同部门之间建立多对多关系属于。)。 不反对规范化。似乎在进行数据库设计时,大力推动包含他们“确定”某人将来会想要的功能。将表/字段添加到数据库以适应功能是否是如此困难,以至于过度工程化的趋势?如果需要,它们是否会像应用程序的其余部分那样进行重构或升级?重做从来都不是一件有趣的事,但是可以将数据从一个表转移到一个新表。只是不确定这种思路会在哪里结束。 编辑:对此有很大的反感,我想知道有多少项目最终没有添加需要进行重大数据库更改的功能,或者是否采取了非规范化的方法(例如添加DepartmentID2字段而不是新表)。员工需要多个部门是一个常见的领域问题。我只是没有注意到许多杂乱无章的数据库模式。

9
开发方法是否应该压制开发人员的个人主义?
我正在大学的最后一个学期,正在学习软件工程课程。在课堂上,我们学习各种软件开发方法。我们关注并用于开发项目的方法是瀑布方法。 我觉得教练可能执行错误。在我们的类图中,我们必须列出所有属性和方法,包括私有属性和方法。我读过几本书,即“清洁代码”,该书说,要使功能尽可能简短和集中。如果它们不能帮助其他开发人员列出所有小功能,这似乎很麻烦(它们是私有的,没有其他人可以使用它们)。另外,在设计程序时,我可能不会想到每个微小的功能,在重构时它们可能会出现。 讲师是否要求我们列出所有功能,以告诉我们错了?而且,这些设计方法是否压制了开发人员的个人主义以编写代码,从而使他们更好地理解代码?

6
如果有的话,在面向对象的系统中,应该在哪里选择类的C结构呢?
C和最有可能的许多其他语言提供了struct用于创建结构(或类似方式的东西)的关键字。从类的简化角度来看,它们是(至少在C语言中),但是没有多态性,继承,方法等。 考虑一下具有C样式结构的面向对象(或多范式)语言。您会在课堂上从哪里选择他们?现在,我不认为它们将与OOP一起使用,因为类似乎替代了它们的用途,但是我想知道在某些情况下,在面向对象的程序中,在某些情况下它们是否比类更受青睐。有这种情况吗?

7
HTML / CSS抄袭
我在这里面临一个问题。一位客户要求我复制一个确切的网站,即使我试图说服他要采用新的设计,他也不接受。他非常喜欢这种设计(顺便说一句,这太可怕了并且过时了,但我不会对他这么说!) 我们讨论此问题已经过去了两个星期,我不知道该怎么办。您有类似的经历吗?我不想失去客户,他付的钱很高,他的工作真的很轻松。同时,我不想在别人的作品上签名。 有什么建议么?类似的经历?谢谢!
9 design  ethics 

4
为什么不建议使用仅设置属性?
今天,在工作中,我的一位同事审查了我的代码,并建议我删除仅设置属性,而改用一种方法。 当我们俩都忙于其他事情时,他告诉我看Property Design《框架设计指南》一书中的部分。在书中,作者只是说要避免: setter的属性比getter具有更广泛的可访问性 现在,我想知道为什么不建议使用仅设置属性?有人可以帮我澄清一下吗?


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.