Questions tagged «design»

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

15
我应该继续自己的自学编码实践还是学习专业的编码方法?[关闭]
最近,我一直在从事专业工作,与其他程序员一起闲逛,并结交业界朋友。唯一的是我是100%自学的。这使我的风格与经过适当培训的人的风格极为不同。不同之处在于我的代码的技术和组织。 这是我做的几件事的混合体。我倾向于将几种编程范例融合在一起。像Functional和OO。我比OO更倾向于功能性方面,但是当某些东西作为抽象实体更有意义时,我会看到使用OO。就像游戏对象。接下来,我也会在做某事时走简单的路线。相反,有时候,我从专业程序员那里看到的代码似乎很复杂!我使用很多闭包。最后,我不是最好的评论者。我发现仅阅读我的代码比阅读注释要容易。大多数情况下,即使有注释,我最终还是要阅读代码。另外,有人告诉我,由于我编写代码的方式非常简单,因此很容易阅读。 我听到受过专业训练的程序员不断进行诸如单元测试之类的事情。我以前从未用过的东西,所以我什至都没有关于它们是什么或它们如何工作的最模糊的想法。下划线“ _”很多,这并不是我真正的品味。我使用的大多数技术都是直接来自我的,或者是我读过的几本书。对MVC一无所知,尽管我曾经听说过很多关于main.js的内容。我认为这是组织应用程序的一种方式。尽管这使我感到困惑,因为到目前为止我已经建立了自己的组织结构。 有点痛苦。当学习Ubuntu的Quickly之类的新知识时,我根本无法使用模板应用程序。我很难理解我可以告诉别人的代码。完整的OO编程确实给我留下了不好的印象,但这似乎是其他所有人严格使用的东西。 这让我对代码的外观没有那么自信,或者想知道我加入公司或为开源项目做贡献时是否会引起火花。实际上,我非常害怕人们最终会签出我的代码。这是任何程序员都可以正常进行的事情,还是我真的应该改变自己的技术?

3
在业务层缓存与在数据层缓存
我一直在使用DAL进行缓存的项目中工作,基本上只是在您要对数据库进行调用时,它会检查缓存中是否已经有数据,如果存在,它不会进行调用,并且而是返回该数据。 我最近才读到有关在业务层进行缓存的信息,因此基本上可以缓存整个业务对象。我可以立即看到的一个优势是响应时间更快。 您什么时候比另一个更喜欢?并且在业务层缓存是一种常见的做法吗?


2
命名约定DAL,BAL和UI层
我正在开发具有以下几层的典型Web应用程序 UI层(MVC) 业务逻辑层(BAL) 数据访问层(DAL) 每个层都有自己的DTO对象,包括BAL和DAL。我对此的疑问如下 DAL返回的DTO只需转换为BAL中的相应DTO,然后发送到UI层即可。在某些情况下,DTO对象的属性和结构都是相同的。在这种情况下,最好将DAL中的DTO简单地返回到UI层而不包含中间对象。 命名这些DTO对象和每一层中其他对象的最佳方法是什么。我应该使用一些前缀,例如DTOName,ServiceName吗?我之所以要求使用前缀的原因是,如果解决方案中的类与Framework中的其他类以及前缀不冲突,那么我更容易理解每​​个类所属的位置吗?
35 c#  design  naming 

4
电子表格背后的数据结构是什么?
我想了解如何解决电子表格(一组命名或以其他方式标识的单元格,其中包含引用其他单元格的值或公式)。我曾尝试查看现有项目,但由于GUI,序列化,事件等操作太多,以至于找不到电子表格。 简单地说,它是如何工作的?

6
是否有适用于折扣模型的设计模式?
有没有实施折扣模型的已知设计模式? 通过折扣模型,我的意思是: 如果客户购买产品X,产品Y和产品Z,则可获得10%或$ 100的折扣。 如果客户购买100个产品X,他将获得15%的折扣或$ 500 如果客户去年带来的收入超过$ 100K,则可获得20%的固定折扣 如果客户购买了2个单位的产品X,则可以免费获得1个单位的产品X(或产品Y)。 ... 是否可以使用一种通用模式来处理所有上述情况?我正在考虑一些模型,但无法遇到通用模型。

8
将网站设计为高度可扩展的最佳方法是什么?
对于需要高度可扩展性的网站(例如Facebook之类的社交网络),设计网站的最佳方法是什么? 我是否应该具有网站查询的Web服务以获取所需的数据? 要么 该网站应该直接查询数据库吗?(可以使用内置的语言构造来自动填充表格等)。 我认为Web服务是更好的设计,因为它提供了集中的数据访问,并且诸如缓存之类的东西变得更易于控制,但是其他人怎么看?

5
调用相同类中其他方法的单元测试方法的最佳方法
我最近正在和一些朋友讨论以下两种方法中哪一种最适合从同一个类中的方法中返回结果或调用同一个类中的方法。 这是一个非常简化的示例。实际上,功能要复杂得多。 例: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } 因此,要测试这一点,我们有2种方法。 方法1:使用函数和操作来替换方法的功能。例: public class MyClass { public Func<int> FunctionB { get; set; } public MyClass() { FunctionB = FunctionBImpl; } public bool FunctionA() …

1
DRY不相关但几乎相同的代码
我有一些几乎相同的代码,但是在主变量上使用绝对不同的类型,它们之间没有继承。具体来说,我正在用Roslyn针对C#和VB.NET编写具有以下类型的分析器: Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax 我想知道是否因为代码在做相同的事情,我应该将其保持为DRY,将其尽可能少地拆分为单独的(但类型除外),还是将它们完全分开,因为这两种方法是不相关,将来的更改可能会迫使一个版本更改,而另一个版本则不能更改(尽管这不太可能)? 编辑:大约一年后,我遇到了同样的问题,罗斯林(Roslyn)团队帮助我解决了这个问题:编写一个采用泛型并具有TAttributeSyntax完成大部分工作的参数的基类。然后,使用最少的需要特定类型的数据编写派生类。
34 c#  design  dry 

8
为什么Clang / LLVM在覆盖所有枚举情况的switch语句中警告我使用default?
考虑以下枚举和switch语句: typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 我是一个Objective-C程序员,但是我已经用纯C语言编写了此文档,以供更广泛的读者使用。 带有-Weverything的Clang / LLVM 4.1在默认行警告我: 开关中的默认标签,涵盖所有枚举值 现在,我可以看到为什么会出现这种情况:在理想情况下,参数中唯一输入的值theMask将在枚举中,因此不需要默认值。但是,如果出现一些hack并将未初始化的int放入我的漂亮函数中怎么办?我的功能将作为库中的一部分提供,我无法控制其中的内容。使用default是处理此问题的一种非常简洁的方法。 为什么LLVM众神认为这种行为不符合他们的地狱装置?我应该在前面加上if语句来检查参数吗?

2
如何改进Bloch的Builder模式,使其更适合在高度可扩展的类中使用
Joshua Bloch的《 Effective Java》(第二版)对我的影响很大,可能比我所读过的任何编程书都影响更大。特别是他的“建造者模式”(项目2)产生了最大的影响。 尽管Bloch的构建者在几个月内使我比过去十年更深入,但我仍然发现自己碰壁:使用自返回方法链扩展类充其量是令人沮丧的,更糟的是噩梦--especially当仿制药开始发挥作用,并特别与自我参照仿制药(如Comparable<T extends Comparable<T>>)。 我有两个主要需求,在这个问题中,我只想关注其中的第二个需求: 第一个问题是“如何共享自返回方法链,而不必在每个...单个...类中重新实现它们?” 对于那些可能感到好奇的人,我已经在本答案的底部讨论了这一部分,但这不是我想在这里重点讨论的。 我要评论的第二个问题是“如何在自己打算由许多其他类扩展的类中实现构建器?” 与构建者一起扩展课程比没有构建者扩展难度更大。扩展具有构建器的类也很麻烦,Needable因此也具有重要的泛型。 所以这是我的问题:我如何改进(称为)Bloch Builder,这样我就可以随意将构建器附加到任何类上,即使该类是可能成为“基础类”的,扩展和扩展了许多次- 在不影响我的未来自我或我的图书馆用户的情况下,由于构建器(及其潜在的泛型)施加了额外的负担吗? 附录 我的问题集中在上面的第2部分,但是我想详细说明问题一,包括如何处理它: 第一个问题是“如何共享自返回方法链,而不必在每个...单个...类中重新实现它们?” 这并不是要防止扩展类不得不重新实现这些链,当然,它们必须-而是如何防止希望利用这些方法链的非子类重新实现。 -实现每个自返回功能,以便他们的用户能够利用它们?为此,我提出了一个需要需求的设计,我将在此处打印界面框架,并暂时保留该框架。它对我来说效果很好(此设计需要花费数年的时间……最难的部分是避免循环依赖): public interface Chainable { Chainable chainID(boolean b_setStatic, Object o_id); Object getChainID(); Object getStaticChainID(); } public interface Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); boolean …

2
NoSQL数据库设计的最佳实践
我刚刚开始使用基于NoSQL文档的数据库(MongoDB),并且对设计数据库的最佳实践感到好奇。 我认为体系结构应该与关系数据库不同?我是否仍应针对规范化的数据库? 例如,我有一个特定的用例。 我有一个具有租用历史记录(地址数组)的用户,该数组应该是用户数组还是具有共享密钥的单独集合?
33 design  nosql 

10
视图和模型是否应该沟通?
根据MVC体系结构的Wikipedia页面,视图可以由模型自由通知,也可以自由查询模型的当前状态。但是,根据Paul Hegarty在Stanford的第1讲第18页上的iOS 5课程的介绍,所有交互都必须通过控制器进行,而Model和View则永远都不应该相互了解。对于我来说,尚不清楚Hegarty的声明是否一定要简化课程,但我很想说他打算这样做。 您如何解释这两种相反的观点?
33 design  mvc 

8
SOLID,避免贫血领域,依赖注入?
尽管这可能是与编程语言无关的问题,但我对针对.NET生态系统的答案很感兴趣。 这是这种情况:假设我们需要为公共管理开发一个简单的控制台应用程序。该应用程序是关于车辆税的。他们(仅)具有以下业务规则: 1.a)如果车辆是汽车,而车主最后一次缴税是在30天前,则车主必须再次缴税。 1.b)如果车辆是摩托车,且车主上次缴税是60天前,则车主必须再次缴税。 换句话说,如果您有汽车,则必须每30天支付一次费用;如果您有摩托车,则必须每60天支付一次费用。 对于系统中的每辆车,应用程序都应测试这些规则并打印不满足这些规则的车辆(车牌号和车主信息)。 我想要的是: 2.a)符合SOLID原则(尤其是开放/封闭原则)。 我不想要的是(我认为): 2.b)一个贫血的领域,因此业务逻辑应该放在业务实体内部。 我从这个开始: public class Person // You wanted a banana but what you got was a gorilla holding the banana and the entire jungle. { public string Name { get; set; } public string Surname { get; set; } } public …
33 c#  .net  design  architecture 

11
设计模式通常是造就好坏的力量吗?[关闭]
我听说它辩称,自切面包以来,设计模式是最好的选择。我还听说过有人认为设计模式会加剧“第二系统综合症”,它们被过度使用,并且使用户认为自己是比实际更好的设计师。 我倾向于更接近以前的阵营,但是最近我看到了这样的设计,其中几乎每个交互都被观察者关系所取代,而所有事情都是单例。 那么,考虑到收益和问题,设计模式通常是好是坏,为什么?

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.