软件工程

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

2
如何使这种设计更接近适当的DDD?
我已经读了几天DDD,并且需要有关此样本设计的帮助。当不允许域对象向应用程序层显示方法时,DDD的所有规则使我非常困惑应该如何构建任何内容。还有什么地方可以协调行为?不允许将存储库注入实体,因此实体本身必须在状态下工作。然后,一个实体需要从域中了解其他信息,但是其他实体对象也不被允许注入?这些事情中有些对我有意义,而另一些则没有。我还没有找到很好的例子来说明如何构建整个功能,因为每个例子都与订单和产品有关,一遍又一遍地重复其他例子。通过阅读示例,我学得最好,并且尝试使用到目前为止所获得的有关DDD的信息来构建功能。 我需要您的帮助来指出我做错了什么以及如何解决,最好是使用代码,因为在已经模糊定义所有内容的情况下,很难理解“我不会建议做X和Y”。如果我无法将一个实体注入另一个实体,则更容易了解如何正确地进行操作。 在我的示例中,有用户和主持人。主持人可以禁止用户,但有一条商业规则:每天仅3个。我尝试建立一个类图以显示关系(下面的代码): interface iUser { public function getUserId(); public function getUsername(); } class User implements iUser { protected $_id; protected $_username; public function __construct(UserId $user_id, Username $username) { $this->_id = $user_id; $this->_username = $username; } public function getUserId() { return $this->_id; } public function getUsername() { return $this->_username; } …

3
开源对商业环境有负面影响吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我公司的产品种类繁多,有一些对我们而言不具有战略意义,因此我想开源它们(以便我们专注于使我们与众不同的事物并开源每个公司所拥有的产品)。 我们的行业(对冲基金)没有开源(我们将是第一家尝试这样做的公司),而我从管理团队那里得到的反馈是1)我们将摧毁该行业,或者2)所有有竞争力的商业公司将团结起来反对我们,我们都会被消灭。我公司目前正在经历共享的积极影响的IT人员与认为我们将放弃一切的业务人员之间进行的一场艰巨的战斗(他们更愿意出售我们希望开源的零件,但是在他们的辩护中,是剥离时的标准)。 所以你的想法是什么?开源是普遍适用还是仅真正适用于软件?对行业内和外部人员总体上有利吗?我实际上对负面影响更感兴趣(尽管也欢迎正面影响) 更新:长话短说,尽管涉及到代码,但与其说与代码有关,不如说是与开源有关。 我们是中型量化对冲基金。我们有一些独特的策略,但也有标准的多头/空头,套利,全球宏观等。 我们保留着我们拥有的独特资金,但其他人拥有的其他东西我们正在考虑开源(我们投入了多年的工作和数百万美元的资金。我们的资金非常受欢迎,我们的业绩处于第一或第二四分位数因此,我怀疑公司会对该行业产生兴趣或正在考虑进入该行业,但我不知道达到什么程度。 我们的目标不是让一个社区为我们工作,而是让任何想修补的人都能做得到并创建他们想要的任何东西(尽管我可能会非正式地分配我们的一些产品,但这不会成为我们产品系列的一部分。员工的时间来协助任何成长的社区。尽管代码库很大,但是这样做的价值在于我们已经获得了行业知识和方法(关于人工智能和量化交易的书籍很多,但是由于大多数公司禁止员工讨论,因此它们实际上落后了很多年)他们在做什么)。长话短说,在这里是否有人可能有价值,但是我正在采用开放源代码作为在剥离产品系列时使公众受益的一种方式。但另一方面,这是许多其他公司的核心产品,他们会 t开心(我想到了linux / windows,维基百科/ britannica,谷歌地图/商业地图公司等等)。我对那些不喜欢我的人很好,但我宁愿不是因为未预料到的后果,而这个问题是试图了解那些对开放核心领域的行业通常产生的后果。例如,很难判断OS市场的哪个部分由于Linux而增长,或者自然而然地增长等等。技术发展如此之快,我正努力了解开源技术如何对其产生影响(以及它是否是积极的。即我们的竞争对手之一向顶尖大学提供了巨额拨款,这显然有助于学校,开源会限制是否需要类似的东西?)。最好让人们不喜欢我,但我宁愿不是因为未预料到的后果,而是要设法了解这些后果通常对那些将核心领域开源的行业造成的影响。例如,很难判断OS市场的哪个部分由于Linux而增长,或者自然而然地增长等等。技术发展如此之快,我正努力了解开放源代码如何对其产生影响(以及它是否是积极的。即我们的竞争对手之一向顶尖大学提供了巨额拨款,这显然有助于学校,开放源代码将限制大学是否需要类似的东西?)。最好让人们不喜欢我,但我宁愿不是因为未预料到的后果,而是要设法了解这些后果通常对那些将核心领域开源的行业造成的影响。例如,很难判断OS市场的哪个部分由于Linux而增长,或者自然而然地增长等等。技术发展如此之快,我正努力了解开放源代码如何对其产生影响(以及它是否是积极的。即我们的竞争对手之一向顶尖大学提供了巨额拨款,这显然有助于学校,开放源代码将限制大学是否需要类似的东西?)。例如,很难判断OS市场的哪个部分由于Linux而增长,或者自然而然地增长等等。技术发展如此之快,我正努力了解开放源代码如何对其产生影响(以及它是否是积极的。即我们的竞争对手之一向顶尖大学提供了巨额拨款,这显然有助于学校,开放源代码将限制大学是否需要类似的东西?)。例如,很难判断OS市场的哪个部分由于Linux而增长,或者自然而然地增长等等。技术发展如此之快,我正努力了解开放源代码如何对其产生影响(以及它是否是积极的。即我们的竞争对手之一向顶尖大学提供了巨额拨款,这显然有助于学校,开放源代码将限制大学是否需要类似的东西?)。 我了解这对我来说似乎很具体,但是我试图了解开放源代码的总体影响,而软件似乎是一个学习的好地方。

2
如果使用GPL或AGPL Web应用程序框架/ CMS,会有哪些法律风险?
试图在SO上问这个问题,但在这里被提及了... 我是否正确地说,使用诸如Composite C1之类的GPL网络应用程序框架不会使公司有义务共享我们针对所述框架编写的源代码? 那是AGPL的目的,对吗? 这是否也适用于KendoUI之类的Javascript框架? 如果我们要下载该GPL,那么我们对框架所做的任何更改都必须提供给其他人。 换句话说,仅将网站内容加载到我的浏览器中并不是在“传送”或“分发”该软件。 我一直在争论我们应该避免使用GPL Web框架,现在在研究之后我很确定自己是错的,但还想征询其他意见? 赛斯

4
Java虚拟机如何执行用其他语言编写的代码?
从Java 1.6开始,JVM不仅可以运行Java,还可以运行多种编程语言。我从概念上了解Java如何在Java VM上运行,但其他语言也无法在Java VM上运行。在我看来,这一切都像黑魔法。您是否有任何文章可向我指出,以便我可以更好地理解它们之间的关系?
12 jvm 

4
仅将接口用于分类是不好的做法吗?
例如: 说我有课A,B,C。我有两个接口,我们称它们为IAnimal和IDog。IDog继承自IAnimal。A和B是IDogs,虽然C不是,但它是一个IAnimal。 重要的部分是不IDog提供任何附加功能。它仅用于允许A和B,但不C以作为参数传递给某些方法进行传递。 这是不好的做法吗?

2
如何临时保存查询结果,以用于另一个?
我有这个问题,我想您可能会帮助我。 PS:我不确定如何称呼它,所以如果有人找到一个更合适的标题,请进行编辑。 背景 我正在使用此应用程序搜索公交线路。 总线是3位数字,并且是唯一的,永远不会改变。 要求是能够搜索从站点A到站点B的线路。 用户界面已经成功提示用户仅使用有效的站点名称。 要求是能够显示一条路线是否有一条直线,如果没有,则显示2条甚至3条线的组合。 例: 我需要从A点到达D点。该程序应显示: 如果有一条直线AD。 如果不是,则显示2行组合,例如AC,CD。 如果没有任何2行组合,请搜索3行组合:AB,BC,CD。 当然,该应用程序应显示总线线路号以及何时切换总线。 是)我有的: 我的数据库结构如下(简化后,实际的数据库包括位置和时间等信息): +-----------+ | bus_stops | +----+------+ | id | name | +----+------+ +-------------------------------+ | lines_stops_relationship | +-------------+---------+-------+ | bus_line | stop_id | order | +-------------+---------+-------+ 在哪里lines_stops_relationship描述公交线路和车站之间的多对多关系。 顺序,表示止损单行显示的顺序。并非所有的行都来回移动,并且顺序具有含义(顺序2的A点在顺序1的B点之后)。 问题 我们找出一条线是否可以轻松通过该路线。只需搜索一条以正确顺序穿过两个点的直线。 如何找到2/3线组合?我当时想搜索一条与源站点相匹配的线,与目标站点相匹配的线,以查看是否可以在它们之间找到一个公共站点,以便用户可以切换公交车。我怎么记得那站? 3行组合更加棘手,我找到了一条线作为源,一条线用于目的地,然后呢?我想搜索一条有2个停靠点的线,但是,我又如何记住停靠点? tl; dr 我如何记住查询结果才能再次使用?我希望在单个查询中实现此目的(对于每个查询,都是针对1行路线的查询,针对2行的查询以及针对3行组合的查询)。 注意:我不介意有人建议使用与我完全不同的方法,我愿意接受任何解决方案。 …
12 php  mysql  routing 

7
您如何从桌面应用程序处理数据库安全性?
大约十年来,我一直在使用SQL Server数据存储来处理各种内部桌面客户端应用程序。我很少启动这些项目-大多数是接管工作。 似乎到处都是的一件事是,该应用程序使用了一个单一的全局SQL Server用户帐户,该帐户向普通数据库授予了该帐户的权限,是的,在某些幼稚的情况下,它使用了该sa用户帐户,我通常尝试在可能的情况下进行修复。 您不能真正有效地隐藏应用程序用来访问数据库的用户名和密码。它们通常存储在ini或config文件中,或者可能烘焙到可执行文件本身中。在所有情况下,如果进行一点挖掘,它们对于用户都是可见的。在一种情况下,我们实际上使用了一个config文件但对其进行了加密,但是当然加密密钥必须存储在可执行文件中(我们并非天真地限制了它的局限性,但是它确实有效地阻止了人们回避那些精明的人查看config文件)。 所有这些系统都在应用程序中内置了一个用户身份验证系统,但是当然它们都是通过应用程序本身进行管理的,这意味着用户信息存储在数据库中。该应用程序根据访问级别限制了您可以执行的操作,但是如果您仅可以连接到数据库并运行即席查询,那就太麻烦了。 我很想知道其他系统可以解决这个问题。这是我所知道的选项: 使用SQL Server的安全性机制维护用户和角色列表,并使桌面应用程序通过T-SQL查询添加和删除用户。 创建直接在服务器上运行的某种Web服务并将身份验证逻辑放在其中,而不是直接连接到数据库。使每个请求都进行安全验证。 第一个选项有些丑陋,因为您要将用户与数据库分开,因此用户不再是一流的实体,并且不能使用外键关系等来引用它们。 第二个似乎是一个主要的性能问题,需要大量额外的工作,而且您不能像NHibernate(我认为)那样容易地使用ORM映射器。 这个事情谁有经验?最佳做法? 编辑 再想想,SQL Server身份验证能否真正解决此问题?例如,如果您的用户必须能够插入和更新时间表记录,以便您可以编辑时间表,则SQL Server无法禁止访问时间表明细表中的其他行,这意味着您也可以读写其他人的时间表。

4
“文档”的确切构成是什么?
当我们说软件产品的“文档”时,其中包括什么,不应该包括什么? 例如,最近一个问题询问是否将注释视为文档? 但是在很多其他领域,这也是一个有效的问题,其中一些比其他领域更为明显: 手册(显然) 发行说明? 讲解 评论 还有其他吗? 画线在哪里。例如,如果“教程”是文档,是“视频教程”文档,还是其他? 通常,只有对软件中的某些内容进行实施,测试和记录后才能对其进行“完成”。因此,这个问题是,在考虑“完成”某些事情时,我们应该考虑哪些内容作为记录的一部分。 问题来自最近在我们的会议上的客户反馈,表明我们的文档需要更多的“样本”,而我们以前并没有像以前那样善于考虑。 受众:使用我们的数据库,编程语言和相关工具(例如,所述数据库的管理员客户端)的软件开发人员

4
自定义字段和数据类型的设计模式/策略
是否有用于设计应用程序的通用策略或设计模式,这些应用程序具有向数据对象添加自定义字段或创建对象的自定义定义的能力。例如,我正在考虑使用诸如SalesForce之类的产品,您可以在其中拥有自己的信息类型,诸如Expression Engine之类的框架以及其处理渠道和渠道字段组的方式(示例),或者像wordpress一样的CMS如何具有以下功能:将字段添加到自定义帖子类型。

4
分布式版本控制系统目前在Gartner的炒作周期中可以放在哪里?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 编辑:考虑到最近的低票(目前为+ 8 / -6),从我的角度来看,从程序员的角度来看,Gartner的生命周期是有偏见的指标。这是我要提交给管理部门的论文的一部分,管理类型是Gartner的读者的一部分。 考虑到DVCS的曝光度和热情(“可以”视为炒作,或至少受到这样的攻击),请在阅读此问题时考虑以下问题:“我如何使用Gartner的炒作周期说服管理层DVCS已准备就绪(或为我们准备好了,而不仅仅是炒作” 仅仅问DVCS是否炒作是没有建设性的,Gartner的炒作周期是一个比问问更客观的工具(即使该工具被认为是有偏差的)。如果您知道任何其他乐器,请务必提及。 编辑2:我同意Gartner的生命周期并不适用于所有技术,但我认为它可能产生了足够的嗡嗡声,因此有些人认为它是炒作,因此,至少应通过在仪器中使用此工具来对其进行评估/思考。为了证明/反证它在任何程度上。我是BTW DVCS的拥护者。 编辑#3:感谢您的回答。Bounty前往Caleb,提供详细和实用的建议来回答我的问题。可以接受的答案是给philosodad提供了另一种有用的工具并回答了我的问题之外。 我正在研究一份白皮书,以支持公司采用DVCS而撰写,但我偶然发现了社会证明的概念。我想证明采用DVCS的社会证据并不一定是对货物的狂热,因此我现在偶然发现了Gartner的炒作周期,该周期描述了5个阶段的技术成熟度。 我的问题是:在炒作周期的特定阶段,分布式指标控制系统(通常是指git,mercurial,bazaar等)的当前位置可以显示什么?话说,您是说目前对DVCS的期望是a)开始,b)膨胀,c)减少(幻灭),d)增加(启蒙)或e)稳定(成熟),以及(更重要的是)为什么? 我知道这是一个难题,涉及主观性,但是我将为特定阶段的最清晰论据/证据提供答案(和传统cookie)。
12 research  dvcs  cvcs 

5
重载了开放/封闭原则的例子吗?
维基百科说 “软件实体(类,模块,功能等)应打开以进行扩展,但应关闭以进行修改” 函数一词引起了我的注意,现在我想知道是否可以假定为方法创建重载可以视为“打开/关闭”原理的示例吗? 让我解释一个例子。考虑一下您的服务层中有一个方法,该方法在将近1000个地方中使用。该方法获取userId并确定用户是否为admin: bool IsAdmin(userId) 现在考虑在某个地方,有必要根据用户名而不是userId来确定用户是否为admin。如果我们更改上述方法的签名,那么我们已经在1000个地方破坏了代码(功能应禁止修改)。因此,我们可以创建一个重载来获取用户名,基于用户名找到userId以及原始方法: public bool IsAdmin(string username) { int userId = UserManager.GetUser(username).Id; return IsAdmin(userId); } 这样,我们通过为其创建重载扩展了功能(功能应可扩展)。 它是一个开放/封闭原则的例子吗?

4
树木是否由“后代”组成?如果没有,为什么不呢?
通常,树数据结构的组织方式是每个节点都包含指向其所有子级的指针。 +-----------------------------------------+ | root | | child1 child2 child3 | +--+------------------+----------------+--+ | | | +---------------+ +---------------+ +---------------+ | node1 | | node2 | | node3 | | child1 child2 | | child1 child2 | | child1 child2 | +--+---------+--+ +--+---------+--+ +--+---------+--+ | | | | | | 这看起来很自然,但是会带来一些问题。例如,当子节点的数量变化时,您需要诸如数组或列表之类的内容来管理子节点。 通过仅使用(第一个)子级和(下一个)兄弟级指针,我们得到如下所示的内容: +-------------------+ …

3
如何TDD返回正确的结果
我正在开始一个新项目,并非常非常努力地使用TDD来驱动设计。我已经努力了很多年,终于获得批准,可以花更多的时间在这个项目上使用它,同时我会学习如何正确地做。 这是一个新模块,可以绑定到现有系统中。当前,所有数据访问都通过Web服务进行,Web服务在大多数情况下只是数据库存储过程的一个精简包装。 一个要求是,对于给定的商店,我将退回所有被认为对该应用程序有效的采购订单。如果PO的发货日期在商店开业日期的指定范围内(对于新商店),则认为该PO有效。 现在,我不能在应用程序代码中放入此逻辑,因为鉴于上述限制,我不会带回一百万个PO,只是为了使适用于该商店的十二个PO可以应用到该商店。 我当时在想,我可以将日期范围传递给GetValidPOs proc,并使用这些值返回有效的PO。但是,如果我们在被认为是有效的采购订单中添加了另一个要求,该怎么办? 以及如何测试并验证其是否正常运行?我们没有使用ORM,并且不太可能发生。而且我无法在测试中调用数据库。 我被卡住了。 我的另一个想法是,有一些模拟返回有效数据,其他模拟返回一些不良数据,并让本地存储库在发生不良数据时引发异常,并测试如果GetValidPOs proc返回无效数据,则引发异常测试中使用的模拟)。 这有意义吗?或者,还有更好的方法? 更新: 看起来我可以使用EF。现在,我只需要弄清楚如何使用它,并使它可测试,同时仍然能够依赖存储过程,以及使数据分散在多个数据库中的困难。

9
了解客户对他的要求的含义是软件开发人员的责任吗?
是/否的问题,为什么? 了解客户对他/她的要求意味着什么的软件开发人员的责任,或者是向开发人员正确解释其要求的客户的责任? 当前的工作状况是“客户已经向我们解释了他的要求。了解请求而不是提出更多问题是您的责任”。 虽然英语不是我的强项,但所有请求都是用晦涩的英语书写的,单词的位置错误且句子难以理解,有些请求则以我以前对系统的理解为前提。 我是系统的第3位或第4位开发人员(最后一位开发人员辞职了),这可能是客户期望开发人员方面有所了解的原因。 在UI和源代码级别上,系统本身都非常混乱。在我看来,这就像猴子编码-编码并希望您正确地处理请求,而实际上并没有理解请求。 我实际上正在考虑辞职,但还没有,因为我不确定谁是对的,谁是错的。

6
“单页网络应用程序”的体系结构指南
我将开始一个辅助项目,以构建“单页” Web应用程序。该应用程序需要是实时的,并在发生更改时将更新发送给客户端。 对于此类应用程序的体系结构,是否有最佳实践方法的良好资源?到目前为止,我发现的最佳资源是trello体系结构文章,网址为:http ://blog.fogcreek.com/the-trello-tech-stack/ 对我来说,这种架构虽然很性感,但可能针对我的特定需求进行了过度设计-尽管我确实有类似的要求。我想知道是否需要打扰服务器端的sub / pub,是否可以在发生某些情况时(例如,当客户端将更新发送到服务器,将更新写入数据库时​​,然后将更新发送给客户端)。 从技术上讲,尽管架构指南在某种程度上应适用于任何基础服务器技术,但我可能希望在Node.JS或Ruby中进行构建。

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.