软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

3
国家模式是否违反《里斯科夫替代原则》?
该图像取自“ 应用域驱动的设计和模式:带有C#和.NET中的示例” 这是状态模式的类图,其中a SalesOrder在生命周期内可以具有不同的状态。在不同状态之间仅允许某些转换。 现在,OrderState该类是一个abstract类,并且其所有方法都继承为其子类。如果我们将子类视为Cancelled最终状态,不允许将其转换为其他任何状态,则必须对override此类中的所有方法进行抛出。 现在,这不是违反Liskov的替代原则吗,因为sublcass不应改变父级的行为吗?将抽象类更改为接口是否可以解决此问题? 如何解决?

3
Scala中未经检查的异常的决定
作为一名Java程序员,我一直对Unchecked Exception持批评态度。通常,程序员使用它作为编码简便性的途径,只会在以后造成麻烦。此外,与未检查的对等程序相比,具有检查的异常的程序(尽管不整洁)非常健壮。 令人惊讶的是,在Scala中,没有什么叫做“检查的异常”。Scala中所有未选中和未选中的Java都未选中。 做出此决定的动机是什么?对我来说,在使用任何外部代码时都会遇到很多问题。并且,如果偶然地文档很差,则将导致KILL。


5
如何创建自己的软件许可证?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我已经看到各种软件的大量许可,例如GNU GPL,BSD许可,MIT许可和LGPL。创建新软件许可证(例如“ John Doe的通用许可证”)的过程是什么?

5
如何减轻运行时创建视图模型的痛苦
对于这个很长的问题,我深表歉意。我在下面总结了我的问题 在MVC世界中,事情很简单。该模型具有状态,在视图显示模式,并且控制器不东西/与模型(基本上),控制器没有的状态。为了完成这些工作,Controller对Web服务,存储库等有一些依赖性。实例化控制器时,您关心的是提供那些依赖关系,而没有别的。执行动作(Controller上的方法)时,可以使用这些依赖关系来检索或更新Model或调用某些其他域服务。如果存在任何上下文,例如说某些用户想要查看特定项目的详细信息,则将该项目的ID作为参数传递给Action。Controller中的任何地方都没有对任何状态的引用。到目前为止,一切都很好。 输入MVVM。我爱WPF,我喜欢数据绑定。我喜欢使数据绑定到ViewModels更加容易的框架(使用Caliburn Micro atm)。我觉得这个世界上事情并不那么简单。让我们再次做运动:该模型具有状态下,查看显示的视图模型和视图模型做的东西/使用模型(基本),一个视图模型做有状态!(澄清;也许它代表所有属性的一个或多个模型,但是这意味着它必须具有对模型的一种方式或另一种,这本身就是状态的基准)为了做ViewModel在Web服务,存储库等方面有一些依赖性。实例化ViewModel时,您关心的是提供那些依赖关系,还需要提供状态。女士们,先生们,这无休止地困扰着我。 每当您需要从中实例化a ProductDetailsViewModel时ProductSearchViewModel(您又从中实例化了ProductSearchWebServicewhich IEnumerable<ProductDTO>,每个人还和我在一起吗?),您可以执行以下操作之一: call new ProductDetailsViewModel(productDTO, _shoppingCartWebService /* dependcy */);,这很糟糕,想象另外3个依赖关系,这意味着也ProductSearchViewModel需要承担这些依赖关系。改变构造函数也是很痛苦的。 调用_myInjectedProductDetailsViewModelFactory.Create().Initialize(productDTO);,工厂只是一个Func,大多数IoC框架很容易生成它们。我认为这很糟糕,因为Init方法是一个泄漏的抽象。您也不能对Init方法中设置的字段使用readonly关键字。我确定还有更多原因。 呼叫_myInjectedProductDetailsViewModelAbstractFactory.Create(productDTO);So ...这是通常建议用于此类问题的模式(抽象工厂)。我虽然是个天才,但它满足了我对静态类型的渴望,直到我真正开始使用它为止。我认为样板代码太多了(除了我使用的荒谬变量名之外,您都知道)。对于每个需要运行时参数的ViewModel,您将获得两个额外的文件(工厂接口和实现),并且需要键入非运行时依赖项,例如额外输入4次。而且,每次依赖关系发生变化时,您也需要在工厂中进行更改。感觉我什至不再使用DI容器。(我认为温莎城堡对此有某种解决方案(有其自身的缺点,如果我错了,请纠正我))。 用匿名类型或字典来做某事。我喜欢我的静态打字。 是的。以这种方式混合状态和行为会产生一个在MVC中根本不存在的问题。我觉得目前还没有一个真正足够的解决方案来解决这个问题。现在,我想观察一些事情: 人们实际上使用了MVVM。因此,他们要么不在乎以上所有内容,要么拥有一些出色的其他解决方案。 我还没有找到带有WPF的MVVM的深入示例。例如,NDDD示例项目极大地帮助我理解了一些DDD概念。如果有人可以将我指向类似MVVM / WPF的方向,我真的很喜欢它。 也许我在做MVVM时出错了,应该将我的设计倒过来。也许我根本不应该有这个问题。好吧,我知道其他人也问过同样的问题,所以我认为我不是唯一的一个。 总结一下 我是否可以正确地得出结论,将ViewModel作为状态和行为的集成点是整个MVVM模式存在某些困难的原因? 使用抽象工厂模式是以静态类型实例化ViewModel的唯一/最佳方法吗? 是否有类似深度参考实现的内容? 是否有很多带有状态/行为的ViewModels设计气味?
17 c#  design  wpf  mvvm 

2
如何开始竞争性编程?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我已经练习编码一段时间了,但是问题是我花了很多时间来编写解决方案。我想问一下竞争性编程是否可以帮助我改善这一点。 如果是,那么我应该如何开始以及可以从哪个网站使用(例如TopCoder)?我现在显然无法解决非常棘手的问题。我该怎么办? 如果没有,我该怎么办? 我还想学习编码还有另一个问题,但事实是我觉得自己不太擅长。我该怎么办?就像从内部烦扰我。 我知道有些人可能找不到这个问题,但是至少请允许我得到答案。

6
雇用开发人员-是否要求将IDE列出?
我一直在查看一些职位发布,并注意到有相当一部分在“所需技能”部分下列出了IDE,即使是高级职位也是如此。这也没有本地化到一家公司,而是每隔几条发布一次。 我对这份工作要求感到困惑,因为我的导师和我一生中见过的一些最好的编码员都是VIM / Emacs忍者。同样,当我与人一起工作时,只要他们在团队中富有成效,我就不会在乎他们使用什么工具。 有人可以解释一下雇用经理使IDE成为正式工作要求的基本原理吗?
17 ide 

2
人们如何维护他们的测试套件?
我尤其对以下方面感到好奇: 您怎么知道您的测试用例是错误的(或已过期)并且需要修复(或丢弃)?我的意思是,即使一个测试用例变得无效,它仍然可以通过并保持沉默,这可能使您错误地认为您的软件可以正常工作。那么,您如何认识到测试套件中的此类问题呢? 您怎么知道您的测试套件已不再足够,应该添加新的测试用例?我想这与需求更改有关,但是是否有任何系统的方法来检查测试套件的适当性?

4
我可以使用什么算法来检测文章或帖子是否重复?
我正在尝试检测文章或论坛帖子是否是数据库中的重复条目。我已经考虑了一下,得出的结论是,重复内容的人将使用以下三种方法之一(以下降的方式很难检测): 简单复制粘贴整个文本 复制和粘贴与自己合并的部分文本 从外部站点复制文章并假扮自己 准备分析文本 基本上任何异常;目的是使文本尽可能“纯净”。为了获得更准确的结果,通过以下方式对文本进行“标准化”: 去除重复的空白并修剪前导和尾随。 换行符被标准化为\ n。 HTML标签被删除。 使用称为Reging Fireball的RegEx,URL被剥离。 我在应用程序中使用BB代码,然后转到。 (ä)有香味的和外来的(英式除外)均转换为非外来形式。 我将有关每篇文章的信息存储在(1)统计信息表和(2)关键字表中。 (1)统计信息表 以下是关于文本内容的统计信息(非常类似于此帖子) 文字长度 信数 字数 句子数 每句话平均字数 自动可读性指数 枪杀雾分数 对于欧洲语言,应使用Coleman-Liau和自动可读索引,因为它们不使用音节计数,因此应产生合理准确的分数。 (2)关键词表 通过排除大量停用词(常用词)(例如“ the”,“ a”,“ of”,“ to”等)来生成关键字。 样本数据 text_length,3963年 letter_count,3052 word_count,684 句子数,33 word_per_sentence,21岁 gunning_fog,11.5 auto_read_index,9.9 关键字1,已杀死 关键字2,人员 关键字3,警察 应该注意的是,文章更新后,以上所有统计信息都将重新生成,并且可能是完全不同的值。 如何使用以上信息来检测数据库中是否已存在首次发布的文章? 我知道我要设计的任何东西都不是完美的,最大的风险是(1)不是重复的内容将被标记为重复(2)系统允许重复的内容通过。 因此,算法应从0(无重复),5(可能为重复)和10(重复)生成风险评估编号。高于5的内容很可能重复。在这种情况下,内容可能会被标记并链接到文章(可能是重复项),并且人员可以决定是删除还是允许。 正如我在存储整篇文章的关键字之前所说的那样,但是我想知道是否可以在段落基础上进行相同的操作。这也意味着进一步在数据库中分离我的数据,但这也将使在我的初始帖子中检测(2)更容易。 我正在考虑统计数据之间的加权平均值,但顺序如何,其结果是什么...
17 algorithms 

11
雇用开发人员-关于提高效率的任何技巧?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我代表一家正在组建大型软件开发团队的软件公司。我们对雇用的人很挑剔,并且保留率很高(大多数开发人员平均在这里工作了5-6年)。 我们一直在花费大量的开发人员和人力资源时间,而申请聘用率却很低。这是我们使用的过程: 电话上的HR面试-涉及询问基本的行为和技术问题 在线测试-涉及30分钟的技术测试 技术电话面试-开发人员进行的60分钟面试 现场采访-几位资深开发商进行的60-90分钟的采访 尽管此过程一直在进行,但我们在采访中花费了太多时间。关于如何以不同的方式来做任何想法?我们的目标是在可能的情况下自动执行任何任务,同时仍保留人才的素质。 更新: 感谢您的答复。需要澄清一些事情。我们的目标是减少从一个阶段进入另一个阶段的申请人数量。这是我们目前的电话号码。 我们收到1000份简历 800份简历通过人力资源部面试 500通过在线考试 100通过初始电话屏幕 10通过现场并被录用 如您所见,我们需要在流程的早期阶段更好地淘汰候选人。我们可以通过在线测试评估人员的方式做得更好吗? 以下是根据一些响应得出的有关流程的更多详细信息: 电话上的HR面试-他们问一些非常基本的技术问题(什么是CLR?),以消除尽可能多的人 在线测试-大约有10个基本问题和3个编码问题 技术电话屏幕-涵盖多种技术。我们不在乎申请人是否不了解所有信息,只要他们能够证明他们将能够采用新技术并迅速加快速度即可 现场-在开发人员面前编码问题。更多架构层面的问题。

2
API应该如何使用http基本身份验证
当API要求客户端对其进行身份验证时,我已经看到使用了两种不同的方案,并且我想知道哪种情况适合我的情况。 示例1.一个公司提供的API,允许第三方使用HTTP Basic使用令牌和机密进行身份验证。 示例2. API通过HTTP Basic接受用户名和密码来认证最终用户。通常,他们会获得令牌以供将来请求。 我的设置:我将有一个JSON API,它将用作移动和Web应用程序的后端。对于移动应用程序和Web应用程序来说,似乎都附带令牌和秘密发送的好习惯,因此只有这两个应用程序才能访问阻止任何其他第三方的API。 但是移动和Web应用程序允许用户登录和提交帖子,查看其数据等。因此,我希望他们也可以通过HTTP Basic在每次请求时登录。 我会以某种方式同时使用这两种方法还是仅在每个请求上发送最终用户凭据(用户名和令牌)?如果仅发送最终用户凭据,是否将它们存储在客户端的Cookie中?

5
数据库中的功能是否阻碍了可扩展性?
我可能无法为该问题提供正确的标题。但这是 我们正在开发财富管理的金融门户。我们期望超过10000个客户端使用该应用程序。门户根据股票市场的技术分析计算各种绩效分析。 我们通过存储过程,用户定义的函数,触发器等通过数据库开发了许多功能。我们认为,与通过C#代码相比,直接在数据库中执行操作可以大大提高性能。实际上,我们确实获得了巨大的性能提升。 当我试图向我们的CTO吹牛时,他反驳了我决定在数据库中而不是代码中实现功能的决定。据他介绍,此类应用程序存在可伸缩性问题。用他的话说:“如今,这些东西都保存在内存/缓存中。随着时间的推移,很难管理集群数据。Facebook,Google在数据库中什么也没有。这是瘦服务器和胖客户端的时代。DB仅用于存储纯数据并且功能应该与数据库完全分离。” 你们能给我一些关于他说的是否正确的建议。如何进行架构师这样的应用程序?

7
ASP.NET Webforms开发人员和Web设计人员:如何进行交互?
我是ASP.NET Webforms开发人员,在与设计师打交道时会遇到一些问题。 设计师总是抱怨asp.net server controls。他们宁愿只拥有一个html文件,并创建css文件以及所需的图像以将它们随身携带。有时候,如果设计阶段是提前完成的,我会得到带有相关css文件的html文件,但是随后我们将设计与aspx文件集成在一起会遇到很多问题(严重控制了telerik控件……等等)。 我想问的是: 我该如何克服这些问题?由于.net服务器控件存在问题,设计人员更喜欢php和mvc开发人员。我需要知道如何以正确的方式与设计师互动。 是否有任何工具或应用程序可为设计人员提供.aspx页的呈现(html页)?我的意思是说运行时中的页面而不是Visual Studio中的aspx。他们确实使用Web表达式,但是他们也希望使用html呈现页面。

4
OpenGL,GLX,DRI和Mesa3D之间是什么关系?
我开始在Linux中进行一些底层3D编程。我在使用高级图形API OpenInventor方面有很多经验。 我知道并不一定要知道所有这些东西如何组合在一起,但是我很好奇。我知道OpenGL只是图形应用程序的标准。Mesa3D似乎是此标准的开源实现。 那么GLX和DRI适合哪里呢?在Wikipedia和所有这些网站上进行挖掘时,我还没有找到关于这一切如何结合的确切解释。硬件加速在哪里发生?专有驱动程序与此有什么关系?

5
我是否需要了解servlet和JSP才能学习Spring或Hibernate或任何其他Java Web框架?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我一直在问很多人从哪里开始学习Java Web开发,我已经知道核心Java(线程,泛型,集合,对(JDBC)有一点经验),但是我不知道JSP和Servlet。我使用服务器端使用PHP以及客户端使用HTML,CSS,Javascript和HTML5的几个基于Web的应用程序完成了我的开发工作。 我要求的大多数人都告诉我立即进入Hibernate,而有些人则告诉我不需要学习servlet和jsps,我应该立即学习Spring框架。这是真的?我不需要学习servlet和JSP来学习休眠或Spring吗? 他们所有的答案使我感到困惑,现在我完全失去了学习或学习的知识。我觉得如果我不学习JSP和servlet,就会错过很多重要的概念,这些概念将来肯定会对我有帮助。 因此,问题是,我是否需要具有基础/知识servlet和JSP才能学习spring或hibernate或任何其他Java web框架。

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.