Questions tagged «design»

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

2
单一责任和自定义数据类型
在过去的几个月中,我一直要求SE和其他网站上的人员给我一些有关我的代码的建设性批评。一件事几乎每次都会弹出,我仍然不同意这个建议。:P我想在这里讨论它,也许事情对我来说会变得更加清楚。 它与单一责任原则(SRP)有关。基本上,我有一个数据类,Font它不仅包含用于处理数据的函数,而且还用于加载数据。有人告诉我这两个应该分开,加载函数应该放在工厂类中。我认为这是对SRP的误解。 我字体类的片段 class Font { public: bool isLoaded() const; void loadFromFile(const std::string& file); void loadFromMemory(const void* buffer, std::size_t size); void free(); void some(); void another(); }; 建议设计 class Font { public: void some(); void another(); }; class FontFactory { public: virtual std::unique_ptr<Font> createFromFile(...) = 0; virtual std::unique_ptr<Font> createFromMemory(...) = …


5
最终用户文档示例的良好参考,并提供建议[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我们的内部软件已被许多用户使用,培训部门要求我们提供最终用户文档格式的任何提示。 有谁知道在哪里可以找到培训部门用来启发灵感的软件最终用户文档的良好示例,或者在任何有很好建议的网站上? 这类似于此问题,但是我正在寻找供非技术用户使用的最终用户文档。

1
胶水或管理课程什么时候做得太多?
我倾向于建立集中的类来管理设计中的其他类。它本身并不存储所有内容,但是大多数数据请求将首先发送给“经理”。在寻找这个问题的答案时,我注意到术语“上帝对象”。可以理解,维基百科将其列为反模式。 合法的胶水类或模块之间的界限在哪里,该胶水类或模块从各处传递数据和消息,而该胶粘类或模块做得太多呢?

3
您如何克服大屏幕房地产设计的挑战?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 这个问题比较主观,但是我希望有一些新的看法。我习惯于为特定的屏幕尺寸(通常为1024x768)进行设计,以至于发现该尺寸不是问题。将尺寸扩展为1280x1024并不能为您带来足够的屏幕空间,无法为您带来显着的变化,但会给我更多的呼吸空间。基本上,我只是扩大了“网格大小”,并且略微缩小屏幕的相同基本设计仍然有效。 但是,在最近的几个项目中,我的客户都使用1080p(1920x1080)屏幕,他们希望解决方案能够尽可能多地使用该屏幕。1920像素的宽度几乎是我习惯使用的宽度的两倍,宽屏使我的一些旧设计方法无法正常使用。我遇到的问题是,面对如此多的空间,我遇到了一些重大问题。 我应该使用几列?宽格式适用于以2:1:1拆分的3列拆分(即,内容列大于其他两个列)。但是,如果我选择三列,那么该多余的列怎么办? 如何有效利用屏幕空间?试图将所有内容同时显示在屏幕上是一种诱惑,但是太多的信息实际上使应用程序更难使用。空格对于帮助理解复杂的信息很重要,但是太多的空格会使相关的概念显得过于分离。 我通常使用具有复杂数据的Web应用程序,而可视化和表示形式是理解原始数据的关键。当您的用户还具有大屏幕(至少24英寸)时,某些信息不在视线范围内,您需要将指针移动很长一段距离。如何确保所需的所有内容都停留在视觉热点内? 当宽度受限制时,像博客之类的简单网站实际上会做得更好,这会导致大量的房地产浪费。我有点想知道是否将文本框和文本预览并排放置对于这种类型的屏幕的管理员侧来说是否会有很大的好处?(1:1两列拆分)。 对于您的答案,我知道设计中的几乎所有内容都是“取决于”的。我正在寻找的是: 您使用的一般原则 您的设计方法是如何改变的 我发现我必须重新训练自己如何使用这种不同的格式。迄今为止,我一直努力解决的每个分辨率难题都约为25%:640至800(增加25%),800至1024(增加28%)和1024至1280(增加25%)。但是,从1280到1920的跃迁在空间上增加了50%,相当于从640跃升到1024。这是没有常用的中等大小来帮助逐步学习课程的。
10 design  gui  usability 

3
关于将DI / IoC容器集成到现有应用程序中的建议
我现在面临着将控制反转(IoC)容器集成到现有应用程序中的问题,并且我正在寻找一些建议,以最容易实现的最终目标是减少耦合,从而提高可测试性。尽管我通常不会将大多数类归类为上帝对象,但每个类都有太多的职责,并且由于静态,单例和缺乏接口而隐藏了依赖性。 这里有一些背景需要解决的挑战: 很少使用依赖注入 静态方法比比皆是-无论是工厂方法还是辅助方法 单身人士相当普遍 接口在使用时不太细 对象经常通过基类引入不需要的依赖 我们的意图是,下次我们需要在特定区域中进行更改时,我们将尝试弄清实际上存在的但隐藏在诸如单例和静态变量之类的全局变量之后的依赖项。 我想这会使IoC容器在引入依赖项注入之后成为第二位,但是我希望可以遵循或考虑到一系列实践和建议,以帮助我们打破这些依赖关系。

4
跨对象边界的信息泄漏
很多时候,我的业务对象往往会遇到信息需要经常跨越对象边界的情况。在进行OO时,我们希望信息位于一个对象中,并且处理该信息的所有代码应尽可能在该对象中。但是,业务规则没有遵循该原则,这给我带来了麻烦。 作为示例,假设我们有一个包含多个OrderItems的Order,该OrderItems引用一个具有价格的InventoryItem。我调用了Order.GetTotal(),它对OrderItem.GetPrice()的结果求和,该结果乘以InventoryItem.GetPrice()乘以数量。到目前为止,一切都很好。 但随后我们发现有些商品以一交易两卖。我们可以通过让OrderItem.GetPrice()做类似InventoryItem.GetPrice(quantage)的事情并让InventoryItem处理来解决这个问题。 但是,然后我们发现二对一交易仅持续特定时间段。该时间段必须基于订单日期。现在我们将OrderItem.GetPrice()更改为InventoryItem.GetPrice(quatity,order.GetDate()) 但是然后我们需要根据客户在系统中待了多长时间来支持不同的价格:InventoryItem.GetPrice(数量,order.GetDate(),order.GetCustomer()) 但是,事实证明,一对一交易不仅适用于购买多个相同库存物品,而且适用于InventoryCategory中任何物品的多个交易。在这一点上,我们举起手来,只给InventoryItem订购项,并使其通过访问器在对象引用图上移动,以获取其需求的信息:InventoryItem.GetPrice(this) TL; DR我希望对象之间的耦合度低,但是业务规则经常迫使我从各地访问信息以做出特定决策。 有好的技巧可以解决这个问题吗?其他人也会发现同样的问题吗?

7
原型开发的第一阶段有多普遍?
在过去的几个学期中,我一直在学习一些软件设计课程,尽管我看到了很多形式化的好处,但我觉得它并没有告诉我有关程序本身的任何信息: 即使它讨论了程序可以做什么,也无法从用例规范中看出程序将如何运行。 即使需求文档可能包含质量需求,您也无法从需求文档中得知任何有关用户体验的信息。 时序图很好地描述了软件如何作为调用堆栈工作,但是非常有限,并且可以从整体上高度了解整个系统。 类图非常适合描述系统的构建方式,但是对帮助您确定软件的功能却毫无用处。 底线到底在哪里:程序的外观,操作方式以及所提供的经验?从中进行设计不是更有意义吗?弄清楚程序应该如何通过原型工作并努力实现它,这不是更好吗? 我知道我可能正遭受理论家教授工程学的困扰,但是我需要问,他们在行业中这样做吗?人们如何弄清楚该程序实际上是什么,而不是应该遵循的程序?人们制作了很多原型,还是他们大多使用UML之类的正式工具,而我只是还没有掌握使用它们的习惯?

4
对某些用户隐藏/禁用功能
可以说我有该应用程序的免费和付费版本。付费版本是免费版本在用户可用功能方面的超集,这意味着付费版本将具有免费应用程序的所有功能以及其他功能。 是否存在根据启动时加载的标志(例如,免费/付费)来切换功能可用性的模式? 我不喜欢到处都有以下代码块的想法: if(isFreeVersion){ // ... } else { // ... } 每个版本都没有2个单独的git分支是不可行的,因为这意味着要维护2个(或更多)代码源,这在一般情况下似乎不切实际,并在此处进行了更多讨论:在Version Control中从同一代码库维护两个单独的软件版本。 有办法做到这一点,同时仍然只有一个代码库,并且不会用检查自由/已付费标志的条件语句来乱扔代码吗? 我敢肯定这已经被讨论过很多次了,并且我肯定有一些解决这个问题的模式,但是我只是找不到它。 我们使用Android / Java。

1
如果不接受在数字列中插入非数字值,SQLite会有用吗?
在SQLite中,以下语句将成功执行,并将字符串插入/更新到SALARY类型为的列中INTEGER: update employee set salary='TOO MUCH' where emp_id=1; 请注意,不会插入/更新零,而是实际的“ TOO MUCH”字符串,因此这与认证类型转换无关。 常见问题解答指出: 这是一个功能,而不是错误。SQLite使用动态类型。它不强制执行数据类型约束。任何类型的数据(通常)都可以插入任何列中。您可以将任意长度的字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中分配给列的数据类型不限制可以在该列中放入哪些数据。每列都可以容纳任意长度的字符串。(有一个例外:INTEGER PRIMARY KEY类型的列只能包含一个64位有符号整数。如果尝试将一个整数以外的任何内容放入INTEGER PRIMARY KEY列,则会导致错误。) 因此,这种行为显然是故意的,但是我想知道为什么 SQLite会有这种行为,因为我所知道的大多数其他SQL数据库的行为都大不相同,因此,当尝试将非数字字符串插入到数据库中时,它们将引发错误或将字符串转换为0一个数字列。 如果没有这种行为,SQLite库会不会有用呢? 这是设计使图书馆小而又快吗? 尝试在数字列中插入字符串时,SQLite库会明显变慢还是变大,以引起错误?
10 design  sqlite 

2
前端用后端语言编写![关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 6年前关闭。 根据我在Web开发中的经验,我知道PHP,Java,Python等语言用于后端开发(在服务器上运行的软件),对于前端语言,则使用JS / HTML / CSS。 但是我看到许多公司都说,例如,PHP用于前端开发,而python用于后端。 这是否意味着PHP是通过REST,RPC等调用使用其他语言编写的其他服务的前端?

2
如Head First设计模式的Duck示例所示,上下文继承与策略模式无关吗?
在Head First Design Patterns中,它通过使用Duck示例讲授策略模式,其中可以在运行时为Duck的不同子类分配特定的行为。根据我的理解,策略模式的目的是在运行时更改单个对象的行为,但是他们使用Duck的继承来更改各种Duck的行为。 关联? Duck的上下文继承是否与策略模式无关,或者是改变Duck类型并改变其行为也是采用策略模式的充分理由吗?您需要同时改变两者的情况是否构成使用策略模式的充分理由?他们为何将其作为策略模式示例? 一个简单的例子 我是否可以仅使用Duck类(没有派生类)来进一步简化此示例?然后,在实现一个鸭子对象时,可以根据不依赖于其自身对象类型的某些情况为其分配不同的行为。例如:FlyBehavior根据天气而变化或QuackBehavior根据一天中的时间或鸭子的饥饿程度而变化。我意识到这将解决与书中提出的问题不同的问题,但是我正在寻找的是可以依靠的相关策略模式示例。 我上面的例子也会构成战略模式吗? 编辑: 我成功找到了两个更简单的策略模式示例,它们更严格地只是没有上下文继承的策略模式:Hunter.java和Solver.py。


2
我应该缓存数据还是访问数据库?
我没有使用任何缓存机制,并且想知道在以下情况下我在.net世界中的选择是什么。 我们基本上有一个REST服务,其中用户传递类别的ID(思考文件夹),并且此类别可能有很多子类别,每个子类别可以具有1000个媒体容器(思想文件引用对象),其中包含有关以下内容的信息可能位于NAS或SAN服务器上的文件(在这种情况下,文件是视频)。这些类别之间的关系与一些权限规则和有关子类别的元数据一起存储在数据库中。 因此,从UI角度来看,我们有一个惰性加载的树控件,该控件由用户通过单击每个子文件夹来驱动(以Windows资源管理器为例)。他们进入视频文件的URL后,便可以观看视频。 随着系统的发展,用户数量可能会增长到1000,而子类别和视频的数量可能会在10000。 问题是我们应该在每个请求访问数据库的地方继续当前的工作方式,还是应该考虑缓存数据? 我们正在使用IIS 6/7和Asp.net。

5
OOP:在哪些情况下,基于类的设计比基于接口的设计更好?
我正在阅读 JDOM的网站。 为什么用具体的类而不是接口来定义JDOM API? Jason Hunter总结了针对JDOM的基于接口的API的论点: 使用接口,所有东西都变成了工厂,必须将元素“导入”到新文档中,而不是仅仅添加元素,不能保证诸如长期序列化之类的功能,因此清单还在继续。 我们实际上是从接口开始的。在对某些同伴的发行前审查中,我们收到了反馈,应该尝试具体的课程。我们做到了,并且设计对此要好得多。 我是初学者。到目前为止,我所听到的所有建议都建议不要将设计与具体类一起使用。 可能在某些地方使用具体的类是适当的。是否存在在设计中使用具体类的常见类问题?

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.