Questions tagged «design»

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

2
您对“游戏化”有何看法?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我观看了一段有趣的Google Talk视频(警告您大约一个小时的时间),以了解您在做什么的游戏化。 显然,StackExchange网站集采用了许多这样的原则。使工作变得有趣有一定的吸引力,但我想知道有多少问题领域可以纳入这些想法?它们肯定适用于社交应用程序,仅此而已?虚拟会员计划的概念也非常引人注目。 游戏化的简短说明: 有计分和奖励制度。例如,StackExchange中的信誉是一种评分。徽章是一种奖励。随着声誉的提高,您获得的其他特权也是一种奖励。 没有真正兑现的忠诚度计划的一个例子是促销活动,便利店在您购买产品并获得FarmVille积分作为回报的情况下进行了一段时间。没有真正的金钱或商品交换手,零售商的成本充其量是最小的。然而,它为这些虚拟投资回报带来了实实在在的金钱。 无耻地使用JohnL的链接:http : //en.wikipedia.org/wiki/Gamification 注意: 演讲者指的是似乎已成为原型的四类用户。他们是成就者,社交者,探索者和杀手。成就者很可能适用于我们所有人的程序员-我们希望把事情做好。显然,有80%的人是社交者,喜欢轻松,无对抗的互动。探索者可以进入游戏/应用程序的每个角落,以发现自己能找到的任何复活节彩蛋和隐藏功能。杀手不仅想赢,还想让你输,并因为击败你而获得称赞/状态。

17
仍然需要编写SQL吗?
拥有适用于大多数现代语言的众多ORM工具,是否仍存在用支持它们的语言/环境在程序中编写和执行SQL的用例?如果可以,为什么? 为了清楚起见:我不是在问程序员是否需要了解SQL,或者我是否应该在桌面上安装SQL工具。我在问一个具体的原因,为什么我可能会在代码(或配置或其他内容)中使用它而不是ORM。
12 design  sql 

6
开发后创建软件设计文档是否合理?
我目前正在为我的“软件开发”研究而毕业,在该研究中,我必须在外部公司中单独开发复杂的软件。所有这些都需要以结构化的方式完成,创建所有相应的文档。 对于这个项目,我选择使用IEEE标准文档:软件需求文档(SRS),软件体系结构文档(SAD)和软件设计文档(SDD)。尽管在学校另有授课,但对于该项目,我选择在开发后(而不是之前)创建SDD 。我的理由是: 我从事实习的公司给了我指导,以实验方式创建满足某些要求的复杂软件。由于他们在项目定义中给了我很大的自由度,因此几乎没有什么可以事先确定的,并且在开发过程中进行试验时最好能遇到。此外,我以个人方式创建软件,对于公司中的其他任何人来说,事先进行此软件设计对我来说都是没有好处的。事前做会花很多时间,以后再做,因为我可以确定由于项目的不确定性,我做的设计必须作很多改动。这对我来说适得其反。 在开发后创建SDD是否有充分的理由?如果没有,那有什么正当理由吗? 编辑:之后创建SDD的原因是为了将来的开发人员继续该项目。在毕业期间,我将无法完成整个项目,因此其他开发人员将不得不继续使用当前的代码库。

5
如何设计例外
我正在努力解决一个非常简单的问题: 我现在正在服务器应用程序上工作,我需要为异常创建一个层次结构(某些异常已经存在,但是需要一个通用框架)。我什至如何开始这样做? 我正在考虑遵循以下策略: 1)出了什么问题? 有人问,这是不允许的。 要求进行某些操作,这是允许的,但由于参数错误而无法使用。 有人问,这是允许的,但是由于内部错误,它不起作用。 2)谁在发起请求? 客户端应用 另一个服务器应用程序 3)消息处理:在处理服务器应用程序时,这全都与接收和发送消息有关。那么,如果发送消息出错了怎么办? 这样,我们可能会得到以下异常类型: ServerNotAllowedException ClientNotAllowedException ServerParameterException ClientParameterException InternalException(如果服务器不知道请求来自何处) ServerInternalException ClientInternalException MessageHandlingException 这是定义异常层次结构的非常通用的方法,但恐怕我可能缺少一些明显的案例。您是否对我不涉及的领域有想法,是否知道此方法的任何缺点,或者是否有更一般的方法来解决此类问题(在后一种情况下,在哪里可以找到它)? 提前致谢
11 design  c++  exceptions  stl 

1
为什么CharSequence不定义contains(CharSequence)?
这适用于Java SE和Android,因为合同是相同的。 Java SE的CharSequence文档 适用于Android的CharSequence文档 CharSequence没有定义contains(CharSequence)方法。我似乎找不到原因,并且包括它非常有用,可以防止需要调用CharSequence#toString()以检查字符序列。 例如,在Android中,用户被迫致电Editable#toString()查看它是否包含字符序列(尽管是Editable实现)CharSequence,但如果CharSequence定义可以避免contains(CharSequence)。 这种设计选择背后的想法是什么?是潜在的监督,还是有设计原因?

2
如果有两种处理任务的方法,应该如何选择呢?
我有一个特定的用例,并发现了在Internet上进行三种方法的定义,这些方法是针对模糊的用例定义的。我盯着这三个要应用的问题。 我倾向于坐在那里,不知道该怎么做-然后什么也不做...是否有选择的好方法?我应该尝试所有这些吗? 为了在某​​些情况下更具体,我正在尝试制作一个非常轻巧的棋盘游戏,在其中我需要屏幕的一部分,可以旋转棋盘游戏网格,放大到网格并在该网格上移动棋子。我不知道如何执行此操作,但是我在网上找到了诸如Core Animation,Core Graphics,Sprite Kit之类的东西,并且看到了支持和反对它们的理由-例如Sprite kit是高级别的,但是将帧频保持在60,当屏幕上没有任何实际动静时,会浪费电池。Core Animation是一个较低级别的API,它反对Apple提出的“采用最高级别的抽象”的指导。我不想学习3件事。1.有没有办法我可以选择并摆脱困境? 我故意将此问题保留为一个模糊的问题,因为我认为它适用于整个软件领域。

3
软件体系结构vs系统体系结构vs类图?
我对以下术语感到困惑: 软件架构 软件应用程序体系结构是定义满足所有技术和运营要求的结构化解决方案的过程,同时优化了诸如性能,安全性和可管理性之类的通用质量属性。它涉及基于各种因素的一系列决策,并且这些决策中的每一个都会对应用程序的质量,性能,可维护性和整体成功产生重大影响。(微软) 系统架构 系统体系结构是概念模型,用于定义系统的结构,行为和更多视图。1体系结构描述是对系统的形式化描述和表示,以支持有关系统结构和行为的推理的方式组织(Wiki) 类图 在软件工程中,统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的类,其属性,操作(或方法)以及对象之间的关系来描述系统的结构。(维基) 如果我阅读了这些描述,所有这些都描述了应用程序不同模块之间的交互。但是,这些之间有什么区别? 我认为/尝试比较这些术语: 类图不是系统体系结构的一种形式,因为上面的描述(structure, behavior, and more views of a system)暗示体系结构中不存在任何实现细节,而类图描述了实现,并且可能更倾向于设计而不是体系结构? 我认为系统架构是还包括外部交互(如数据库)的架构,而软件架构则专注于应用程序本身?

1
REST服务作为2000多个客户端计算机的应用程序服务器。这是个好主意吗?
我们将使用javaFx中的UI构建一个系统,该用户界面将部署到2000台以上的计算机(最低数量为2000,但将会更多-可以达到5000台计算机)。 由于其他原因/限制,必须将其安装在计算机上,因此我们无法使用Web浏览器界面进行操作。 2000多台计算机将位于不同的地理位置组。通常,连接是好的,但在更偏远的位置可能不是很好。 我正在考虑使用Spring + Spring Boot + Spring Data(java)构建REST服务集群,而不是直接访问数据库。 REST服务将接受并返回Json。 我认为这是个好主意,因为: 该服务将充当数据库连接池(我认为数据库上的2000多个连接会引起问题); 可能有一个将日志传送到其他只读数据库的数据库来服务某些查询; 随着我们可以添加更多机器来运行REST服务,它将更好地扩展; 出于安全性和带宽节省的原因,可以在压缩中使用HTTPS。 无需重新部署2000多台计算机,就可以对业务实体进行一些集中式更改。 它与其他系统更好地集成(只需将其指向REST服务)。 这真的是个好主意吗? 您可以分享一些正面或负面的经验吗? 谢谢。
11 java  design  rest  spring 

4
我应该先构建一个功能齐全的应用程序,还是一个简单的应用程序,然后慢慢添加功能?
我在一家制造工厂工作,该工厂负责IT部门创建车间调度程序(非常需要)。根据其他经验,最好花更少的时间来构建可用的基本框架,然后在基础上通过添加功能或通过立即创建完全实现的解决方案来开始构建。我只从事开发工作大约一年,对于最初创建这种大小的应用程序没有太多经验。我一直倾向于这样一种想法:准系统应用程序是第一种应运而生的方法,这是由于对某种类型的数字时间表的极端需求,但我担心在事实之后添加随机功能可能会有些混乱。如果您处在相同的情况下,您会选择哪条路?

3
如何执行输入验证而没有异常或冗余
当我尝试为特定程序创建接口时,通常是在尝试避免引发依赖于未经验证的输入的异常。 因此,经常发生的事情是我想到了这样的一段代码(出于示例目的,这只是一个示例,不要介意它执行的功能,例如Java): public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) { sb.append(' …

2
通过事务将业务逻辑与数据库逻辑分开
我们的应用程序包含三层。服务层提供外部API。BO层用于我们的业务逻辑,而DAO层用于我们的数据库连接。 假设每次更新文件时,我们还希望更改文件夹中的某些内容,例如“上次修改日期”。这需要在事务中完成。要么成功,要么文件和文件夹都被编辑。否则发生故障,事务将回滚,因此两个对象都处于先前状态。 “编辑文件时编辑文件夹”操作纯粹是业务逻辑。因此,这将意味着它属于BO层。但是,我们将Objectify用于数据库,因此要启动事务,我们需要调用ofy()。transact(...)。如果在BO层中调用此函数,则会破坏我们的设计,因为在业务层中将有数据库特定的调用(Objectify)。 什么是解决此问题的干净方法?

5
有什么好的设计习惯可以避免询问子类类型?
我已经读到,当您的程序需要知道对象是什么类时,通常表明存在设计缺陷,因此我想知道什么是处理此问题的好方法。我正在实现一个Shape类,该类具有从其继承的不同子类,例如Circle,Polygon或Rectangle,并且我有不同的算法来确定Circle是否与Polygon或Rectangle碰撞。然后假设我们有两个Shape实例,并且想知道一个是否与另一个碰撞,在这种方法中,我必须推断正在碰撞的对象是哪种子类类型,以便知道应该调用哪种算法,但这是一个设计或实践不当?这就是我解决的方法。 abstract class Shape { ShapeType getType(); bool collide(Shape other); } class Circle : Shape { getType() { return Type.Circle; } bool collide(Shape other) { if(other.getType() == Type.Rect) { collideCircleRect(this, (Rect) other); } else if(other.getType() == Type.Polygon) { collideCirclePolygon(this, (Polygon) other); } } } 这是一种不良的设计模式吗?如何解决这个问题而不必推断子类类型?

7
用OO语言实现对象状态?
我已经看过一些Java代码,它可以模拟赛车,其中包括基本状态机的实现。这不是经典的计算机科学状态机,而仅仅是一个可以具有多个状态并且可以基于一系列计算在其状态之间进行切换的对象。 为了描述问题,我有一个Car类,它带有一个嵌套的枚举类,该类为汽车的状态定义了一些常量(例如OFF,IDLE,DRIVE,REVERSE等)。在同一个Car类中,我有一个update函数,该函数基本上由一个大的switch语句组成,该语句打开汽车的当前状态,进行一些计算,然后更改汽车的状态。 据我所知,Cars状态仅在其自己的类中使用。 我的问题是,这是处理上述性质的状态机的最佳方法吗?听起来确实是最明显的解决方案,但过去我一直听说“ switch语句不好”。 我在这里看到的主要问题是,随着我们添加更多状态(如果认为必要),switch语句可能会变得非常大,并且代码可能变得笨拙且难以维护。 有什么更好的解决方案?

1
洋葱架构与3层架构
我看到洋葱架构仅比BL负责在DAL(或DAL的接口)上调用方法进行CRUD的3层架构有所益处。洋葱具有更好的关注点分离,可测试性,可维护性,并且更清洁。 那么,洋葱架构在各个方面是否确实更好,并且3层架构只是做事的一种旧方法,或者在某些情况下,我更喜欢使用3层架构,如果这样-哪个?

1
枚举具有很多布尔属性
我目前正在开发一个webapp,我们经常需要根据要返回给用户的页面来调整一些服务器逻辑。 每个页面都有一个4个字母的页面代码,这些页面代码当前在类中作为静态字符串列出: public class PageCodes { public static final String FOFP = "FOFP"; public static final String FOMS = "FOMS"; public static final String BKGD = "BKGD"; public static final String ITCO = "ITCO"; public static final String PURF = "PURF"; // etc.. } 通常在代码中,我们会看到这样的代码(第一种形式): if (PageCode.PURF.equals(destinationPageCode) || PageCodes.ITCO.equals(destinationPageCode)) { …
11 java  design  enum 

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.