Questions tagged «modeling»

8
如果项目中没有设计人员,开发人员是否应该进行UI原型设计?
我正在与一个创建专有Web应用程序的小团队一起工作,而UX并不是一个优先事项,因为我们自己的人将是操作它的人,但是我们确实努力使他们的工作更轻松。 作为开发人员,我是否应该在开始创建新屏幕之前创建UI样机?没什么特别的,主要是为了与同事讨论并拥有参考模型的总体布局。在盲目的研究代码之前,我将它与创建一些UML图进行了比较。 我的一位同事说这很荒谬,不是我的工作。

8
有没有一种编程范例可以促进使依赖关系对其他程序员来说非常明显?
我在一个数据仓库中工作,该数据仓库通过许多流和层为多个系统提供源,并且具有迷宫般的依赖关系,将各种工件链接在一起。几乎每天我都会遇到这样的情况:我运行某些东西,它不起作用,运行大量代码,但是几个小时后,我意识到我已经设法将现在所知的一小部分概念化为流程图需要一天的稍后时间,所以我问一个人,他们告诉我必须先运行另一个流,并且如果我在这里检查(表明其他编码依赖项的巨大堆栈中某些看似任意的部分),则我将看到了这个。真令人沮丧。 如果我能够向团队建议,如果我们做更多的事情来使对象之间的依赖关系更加可见和明显,而不是将它们深深地嵌入到递归代码级甚至数据中,那可能是个好主意。之所以必须存在,是因为它被另一个流填充了,也许是通过引用一个众所周知的,经过测试的软件范例进行的,那么我也许可以使我的工作变得简单,而其他所有人都可以简化很多。 向我的团队解释这种好处是很困难的。他们倾向于按照现状接受事物,而不是“想大”,因为他们看到了能够以新方式概念化整个系统的好处–他们并没有真正看到是否可以为大型系统建模高效,那么就不太可能遇到内存效率低下,流停止唯一约束和重复键,废话数据的情况,因为这样可以更轻松地进行设计以符合原始视觉,并且以后不会遇到所有这些问题我们现在正在经历,我知道这与以往的工作不同寻常,但他们似乎认为这是不可避免的。 那么,有谁知道一个强调依赖关系并促进系统通用概念模型以确保长期遵守理想的软件范例?目前,我们几乎陷入了混乱,每个冲刺的解决方案似乎都是“只是在这里,这里和这里添加此东西”,而我是唯一一个担心事情真的开始崩溃的人。

8
什么时候原始的迷恋不是代码的味道?
最近,我读了很多文章,将原始的痴迷描述为一种代码气味。 避免原始痴迷有两个好处: 它使域模型更加明确。例如,我可以与业务分析师讨论邮政编码,而不是包含邮政编码的字符串。 所有验证都放在一个地方,而不是整个应用程序。 那里有很多文章描述什么是代码气味。例如,我可以看到为这样的邮政编码除去原始的困扰的好处: public class Address { public ZipCode ZipCode { get; set; } } 这是ZipCode的构造函数: public ZipCode(string value) { // Perform regex matching to verify XXXXX or XXXXX-XXXX format _value = value; } 您将打破DRY原则,将验证逻辑放在所有使用邮政编码的地方。 但是,以下对象呢? 出生日期:检查是否大于预期且小于今天。 薪金:检查是否大于或等于零。 您将创建DateOfBirth对象和Salary对象吗?好处是您可以在描述域模型时谈论它们。但是,这是过度工程的一种情况,因为没有太多的验证。是否有一条规则描述了何时以及何时不消除原始的困扰,或者如果可能的话,您应该始终这样做吗? 我想我可以创建一个类型别名而不是一个类,这将有助于上面的第一点。

7
传播模式改变了对象模型。
这是一个常见的情况,总是让我感到沮丧。 我有一个带有父对象的对象模型。父级包含一些子对象。这样的事情。 public class Zoo { public List<Animal> Animals { get; set; } public bool IsDirty { get; set; } } 每个子对象都有各种数据和方法 public class Animal { public string Name { get; set; } public int Age { get; set; } public void MakeMess() { ... } } 当子级更改时(在这种情况下,当调用MakeMess方法时),父级中的某些值需要更新。假设当Animal的某个阈值变得混乱时,则需要设置Zoo的IsDirty标志。 有几种处理这种情况的方法(我知道)。 1)每个动物都可以有一个父Zoo参考,以便交流更改。 …

20
UML图对于成功的项目有多重要?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我在一个项目的中间,被要求写UML图(用例,类图等)。该项目不是很复杂。 我想知道这是否浪费我的时间?我是否应该做其他有趣的事情,例如编写代码?在什么情况下不经过所有概念阶段就不能建造东西吗?一切都与复杂性有关吗?如果是这样,如何衡量呢?
22 uml  modeling 

5
与在代码中完成所有工作相比,对软件系统进行建模有什么好处?
我认识的大多数(如果不是全部)IT人员相信,在编码之前使用UML或其他类型的图对软件进行建模是有益的。(我的问题不是专门关于UML的,它可以是软件设计的任何图形或文本描述。) 我不太确定。主要原因是:代码没有说谎。它由编译器或解释器检查。希望它具有自动化测试,并且需要通过静态代码分析。如果一个模块不能与另一个模块正确连接,则在代码中通常很明显,因为会收到一条错误消息。 使用图表和其他文档无法完成所有这些操作。是的,有些工具可以检查UML,但是到目前为止,我所看到的一切都非常有限。因此,这些文档往往不完整,不一致或简单。 即使图本身是一致的,您也不能确定代码是否实际实现了它们。是的,有代码生成器,但是它们从不生成所有代码。 我有时会觉得对建模结果的痴迷是因为这样的假设,即代码不可避免地必须是一些不可理解的混乱,而建筑师,设计师或其他掌握高薪的高薪人士则不必处理这些混乱。否则,它将变得太昂贵。因此,所有设计决策都应远离代码。代码本身应该留给能够写(甚至可以读)但不必处理其他任何东西的专家(代码猴子)。当汇编程序是唯一的选择时,这可能很有意义,但是现代语言允许您以很高的抽象水平进行编码。因此,我真的不再需要建模。 我缺少用于建模软件系统的哪些论据? 顺便说一句,我相信图是一个伟大的方式来记录和沟通软件设计的某些方面,但是,这并不意味着我们应该立足于他们的软件设计。 澄清: 由于不清楚,这个问题被搁置了。因此,让我添加一些解释: 我在问使用将软件建模的(非代码)文档作为有关软件设计的主要事实来源是否有意义。我没有想到从这些文档中自动生成很大一部分代码的情况。如果是这种情况,我会将文档本身视为源代码,而不是模型。 我列出了此过程的一些缺点,这使我想知道为什么有这么多人(以我的经验)认为它是进行软件设计的首选方法。

6
如果市场营销和UI命名发生变化,是否应该更改实体的内部命名(类,方法,数据库表等)?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我们拥有长寿的产品已有8年之久。随着时间的流逝,概念和实体的名称会发生​​变化。我们是否应该进行工作以重命名所有代码库,数据库表和列以匹配这些新名称? 是否已对此研究或一些最佳实践进行了研究? 谢谢

2
函数式程序员使用什么代替UML?
我是CS学生。我目前正在参加讲座,在那里我们将学习目标分析和设计。它主要由编写用例,分析我们为客户编写一些应用程序时可能遇到的问题以及如何设计项目以使其既可扩展,对开发人员清晰又不会在客户争论某些问题时产生问题而组成特征。由于它是“客观的”,因此我们是从OOP(类等)的角度来学习它的。 现在,我们使用UML作为帮助工具。我相信我对OOP有很好的了解,但是我也学习了功能范例,并在我的一些较小的项目中成功使用了它。 我们的老师面对“功能范式有什么意义”?问题,他回答他没有使用功能语言编写任何更大的项目,并且他不知道功能程序可以使用哪种工具。 那么,他们将使用什么呢?有一些方法吗?或者也许不需要这种东西?

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

1
如何在UML活动图中表示嵌套动作?
这个问题是非常相似,这一个,但得到的答复不符合我的需求。它专注于特定的UML工具(Papyrus),而我的问题是关于UML的一般性问题。 我想在活动图中表示一个嵌套动作,但是我不知道执行此动作的常用方法是什么。这个想法是,存在一个与其他动作具有相同作用域的动作,但是执行起来更为复杂。我想展示有关其执行的更多详细信息,同时仍能够在其他级别上展示该操作。 在下面的示例(该活动图显示了某种“ 返乡 ”活动)中,嵌套动作位于该Pet the cat动作中。请注意,此图中还有另一个潜在错误,请参阅问题末尾的勘误表。 我已经使用了结构化节点,但是我不确定这是正确的方法,因此是一个问题。在状态图中,等效项将是复合状态,但是我只是找不到关于复合动作的任何信息。关于结构化节点,在阅读了一些有关它的文档后,我仍然没有真正知道应该如何使用它,因此,我可能完全不喜欢该图。 我也知道有可能用三叉戟符号来引用另一个子活动,如下图所示,但是它不符合我的需求,因为我希望所有信息都在同一张图表上(因此我可以打印它而不会丢失任何信息): 那么代表这种嵌套动作的标准方法是什么?按照标准,我指的是有效的UML,通常在大多数UML设计工具上都可以看到并且可行。 无关的勘误表:我的图表中有另一件事是错误的,进入同一动作(Scratch behind the ears)的箭头应先进入合并节点,然后再输入该动作。请参阅下面的评论,包括JOT的引用。
16 uml  modeling 

2
FP用于仿真和建模
我将要开始一个模拟/建模项目。我已经知道OOP用于此类项目。但是,研究Haskell使我考虑使用FP范例对组件系统进行建模。让我详细说明: 假设我有一个类型A的组件,其特征是一组数据(如温度或压力,PDE和某些边界条件等参数),以及一个类型B的组件,其特征是一组不同的数据(不同或相同的参数,不同的PDE和边界条件)。我们还假设将要应用于每个组件的函数/方法是相同的(例如,Galerkin方法)。对象的可变状态将用于非恒定参数。 如果要使用OOP方法,我将创建两个对象,这些对象将封装每种类型的数据,解决PDE的方法(继承将在此处用于代码重用)和PDE的解决方案。 另一方面,如果我要使用FP方法,则每个组件都将分解为数据部分和对数据起作用的功能,以获得PDE的解决方案。非常数参数将作为其他函数(例如时间)传递或由某种可变性(可变性的仿真等)表示。假设对数据进行线性运算是微不足道的,这种方法对我来说似乎更简单。 总之,与OOP相比,实施FP方法实际上是否更简单,更易于管理(添加不同类型的组件或新方法来解决pde)? 我来自C ++ / Fortran,而且我不是专业程序员,所以请在出现任何错误的地方进行纠正。

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

2
这个学习领域是什么?
假设我正在设计一个鞋经销商的网站。他们有不同的品牌和种类的鞋子,当然,他们想要一个很好的搜索功能。 因此,鞋子可以具有不同的属性。它们可以具有专有属性,例如大小,宽度,性别和儿童/成人。或者它们可以具有非排他性,例如颜色(鞋子上可能有两种或更多种颜色)。有些类别可能与某些其他类别发生冲突,例如“礼服”和“休闲”(鞋子既不能是正装鞋又不能是运动鞋(在此示例中,忽略“舒适”的正装鞋)),而它们尚不冲突。其他,例如“礼服”和“靴子”(鞋子可以是正装靴子)。专有属性易于建模,但是潜在冲突的属性又如何呢?这对于集合论会是个问题吗? 通常将这种应用计算机科学称为什么?数据建模还是更具体的东西?我想了解更抽象的哲学原理,例如排他性和非排他性,并了解如何在代码,数据结构和数据库模式中实现这些原理。 我正在谈论的一个很好的例子是修改后的预排序树遍历算法。这是制作嵌套层次分类系统的好方法。因此,您遇到了一个现实的组织问题:类别,然后有了一个可以对该问题进行建模的数据结构。 我在哪里可以了解有关此类物品的更多信息?
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.