软件工程

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

3
如何为多个项目中解决的问题建立故事准备模型
在我们公司中,几个团队将同时从事多个项目的不同组成部分。例如,一个团队可能为某些项目制作特定种类的软件(或硬件),而另一个团队可能制作另一种特定种类的软件。我们使用Jira项目来托管特定项目的问题,并使用Jira董事会来为不同团队的sprint进行托管。 我们面临着避免在项目之间重复代码的问题,并且已经开发了一套在这些项目中使用的核心库。在进行项目工作时,一些开发人员会意识到他们编写的一段代码更加有趣,应该将其提取到一个核心库中,或者他们正在使用的某些核心代码存在错误,需要更多的参数化,或者新功能...您命名。 因此,他们创建了一个核心库问题,该问题进入了核心项目的待办事项列表。在核心图书馆会议上(一周一次)对所有这些问题进行审查,确定优先级和估算,并将在以后的某些冲刺中根据其优先级(与项目相关的问题)进行处理。 通过对问题进行排序来确定优先级,然后sorted在已排序的问题上贴上标签(以便我们可以搜索未排序的问题)。然后,我们将每个核心组件手动发行一个问题到待办事项的顶部,以便首先解决它们。当某些团队将这样的问题放入他们的冲刺中时,他们不得不手动将另一个项目拖到待办事项列表的顶部。 这很容易出错。基本上,我们拥有的是“未解决”和“进行中”之间的其他问题状态“已排序”和“估计”。通过sorted标签及其在电路板上的位置来反映这一点非常麻烦且容易出错。(例如,如果有人在某个冲刺中上下移动一个问题,这将反映在核心董事会上,默默地扰乱团队在几周前的广泛讨论中可能已经决定的问题的顺序。) 那么有什么更好的方法来实现呢?

2
用于基于REST的应用程序的JWT身份验证的企业模式?
JWT规范仅描述了有效负载及其发送方式,但未启用身份验证协议,从而允许了灵活性,但非常不幸的是,灵活性可能导致反模式和设计错误。 我正在寻找一些经过深思熟虑且经过测试的JWT身份验证企业模式,可以使用或改编它,但未能找到完整的东西。 我在想的是: 当未满足任何授权标头或JWT令牌无效或已过期时,发送HTTP 401 为了进行身份验证,请使用/ login REST通道,将用户名和密码作为JSON对象发送 为了使令牌保持活动状态,请使用/ keepalive REST通道,每N(5)分钟调用一次,接收新的JWT令牌,并在每次调用后替换现有的令牌(令牌在M(15)分钟后过期) 但是,令我困扰的是该/ keepalive频道的必要性。另一方面,它迫使我防止身份验证过期,即使用户不在(该决定,如果我们希望仍然不执行keepalive的决定),当然,这是对协议的额外调用和额外复杂性。有趣的是,服务器会自动延长令牌。在基于会话的环境中,它是通过重置时间戳来实现的,但是,在这里,服务器将不得不发送新令牌,可能不是每次都发送一次,但是一旦令牌在R(例如10)分钟内到期,就必须发送新令牌。但是将其放在响应主体中将意味着修改JSON响应协议(因此,该解决方案具有侵入性且不透明),并且将客户端可以处理的额外HTTP标头不一定不一定是一个好模式。一世' 有没有可以解决我的问题的现成企业模式?我的协议草案是否可靠?与从头开始设计相比,我更喜欢使用现成的东西。

1
Identity Server提供了ASP.NET Core Identity不提供的功能
使用ASP.NET Core制作新网站时,我想尽全力。我希望用户访问我的网站能够使用Facebook和Google等社交媒体进行注册和登录。在他们向我的WebAPI请求资源时注册后,我需要知道哪个用户已登录,以便可以根据用户的个性化资源请求。我玩过ASP.NET Core Identity,这似乎提供了我所需的大部分功能-例如,使用Entity Framework向外部提供程序注册,登录和将这些详细信息存储在数据库中-比我真正想要的要神奇的多-许多教程列出了使它工作的步骤,而没有说明它在后台与Facebook对话的工作方式。 在前端,我正在寻找使用Aurelia的方法,并且注意到许多使用Identity Server的教程-我理解这是OpenIDConnect的实现。 看完有关IdentityServer的视频...据我了解,您可以将ASP.NET Core Identity与IdentityServer一起使用。我没有得到的是,这是否对实现ASP.NET Core Identity有用。(这就是说,我似乎找不到用于集成Aurelia和ASP.NET Core Identity的教程...。)与仅使用ASP.NET Core Identity相比,使用Identity Server增加更多复杂性通常有什么好处?
9 asp.net  oauth2 

3
数据库中域逻辑的时代结束了吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 我最近偶然发现了2016年的这一观点,说数据库中仍然存在领域逻辑的情况。 我认为这完全是过时的。我只是想知道那家伙是否​​仍然生活在90年代,或者这真的是真的。保留旧系统。 由于安全性要求,在数据库中包含域逻辑该怎么办?那真的是一件事吗?
9 database 

2
微服务和规范模型
当我在该网站上阅读有关微服务的信息时,遇到了以下声明。规范架构是什么意思?与域模型不一样吗? 微服务架构模式还拒绝了SOA的其他部分,例如规范架构的概念。

1
使用gitflow时保持干净的git历史记录-开发中未合并的提交
使用gitflow时,在创建release-1.0.0分支并将其合并到master和时develop,两个分支都将缺少提交: master不会有release-1.0.0合并到的提交develop develop不会有release-1.0.0合并到的提交master 相反,在hotfix-1.0.1创建并合并到之后master,在将其合并到时develop,要合并的提交将包括先前release-1.0.0合并到的提交master;所以它看起来像这样: User 'john doe' is trying to merge the following commits into 'develop' from 'hotfix-1.1.1'. * merge release-1.0.0 to master * merge release-1.1.0 to master * Fix shopping cart critical bug 如果这听起来有点混乱,你很容易就注意到这个everytie你看到的develop通常是一对夫妇后面的提交master(即使开发,从理论上说,应该只有提前,因为它的主要分支。这些提交的合并从release-x.x.x到master)。 应该如何处理以保持干净的历史记录?
9 git  gitflow 

3
接口依赖于具体类是否可以?
我在Java中为自定义错误处理程序创建接口。 想要传递一个参数错误对象,但我需要它成为Exception类的子对象。 在接口中使用我定义的类名可以吗? 就不依赖于任何实现而言,这是否会使它减少接口的数量? 我尝试做这样的事情: public class CustomException { /* ... Implementation ... */ } public interface Interface { void onError(CustomException ex); }

4
Python中的类装饰器:实际用例
我正在寻找Python类装饰器的实用和非综合用例。到目前为止,对我而言唯一有意义的情况是在发布者-订阅者系统中注册一个类,例如插件或事件,例如: @register class MyPlugin(Plugin): pass 要么 @recieves_notifications class Console: def print(self, text): ... 我一直在考虑的任何其他明智的情况都可以建立在继承,元类或修饰方法之上。您能否分享使用类装饰器的任何好(或坏!)示例? 谢谢!

3
有时私有功能只是功能的内部单元,尚待提取。那么为什么不测试它们呢?
有时,模块或类的私有函数仅仅是功能的内部单元,尚待提取,可能值得对其进行测试。那么为什么不测试它们呢?如果提取它们,我们将在稍后为它们编写测试。那么,当它们仍属于同一文件时,为什么不立即编写测试呢? 展示: 首先,我写道module_a。现在,我要为此编写测试。我想测试“私有”功能_private_func。我不明白为什么我不为它编写测试,如果以后我仍然可以将其重构为它自己的内部模块,然后为它编写测试。 假设我有一个具有以下功能的模块(它也可以是一个类): def public_func(a): b = _do_stuff(a) return _do_more_stuff(b) _do_stuff并且_do_more_stuff是模块的“私有”功能。 我理解我们只应该测试公共接口,而不是实现细节的想法。但是,这是事情: _do_stuff并_do_more_stuff包含该模块的大部分功能。它们中的每个都可以是不同“内部”模块的公共功能。但是它们尚未进化,并且足够大以至于可以提取为单独的文件。 因此,测试这些功能是正确的,因为它们是功能的重要单元。如果它们作为公共功能位于不同的模块中,我们将对其进行测试。那么,为什么还没有(或曾经)将它们提取到另一个文件时不对其进行测试呢?
9 python  testing 

3
选择热量最多的食物
假设我每天吃五顿饭,并且由于一周中有七天,我每顿饭有七个食谱,总共35个食谱。每个食谱都有卡路里计数。每一餐每一天都必须包含一个食谱,并且每个食谱都固定于特定的一餐(例如晚餐不能吃煎饼)。解决方案中必须包含所有35种食谱,因此一周内不能重复食谱。 我想找到可以每天提供最多卡路里数的膳食安排-也就是说,我想使每天消耗的总卡路里之间的差异最小化。 这不是作业问题,这是事实!我无法提供比暴力破解更好的方法,并且有7!^ 4个组合,这很多。


2
是否可以使用“按位与非”来定义所有按位运算符,类似于仅使用“布尔与非”就可以构建所有布尔逻辑的方法?
Nand 之所以称为“通用”逻辑门,是因为它允许您定义所有其他布尔逻辑门: not(x) = nand(x,x) and(x, y) = not(nand(x, y)) or(x, y) = nand(not(x), not(y)) nor(x, y) = not(or(x, y)) xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b))) 这被称为nand-logic,并且在现代计算机中经常使用,因为可以使晶体管的行为类似于nand-gate。 我想知道是否可以对按位运算执行类似的操作。可以在例如逐位NAND(bnand)来定义bnot,bor,band,bnor,bxor?有通用的按位运算吗?

3
为什么Swift首先要初始化子类的适当字段?
在Swift语言中,要初始化一个实例,必须填写该类的所有字段,然后才调用superconstructor: class Base { var name: String init(name: String) { self.name = name } } class Derived: Base { var number: Int init(name: String, number: Int) { // won't compile if interchange lines self.number = number super.init(name) } } 在我看来,这是倒退的,因为需要self在将实例赋值给其字段之前创建实例,并且该代码给人的印象是好像链接仅在赋值之后发生。除此之外,超类没有合法的手段来读取其子类的引入属性,因此在这种情况下安全性不算在内。 另外,许多其他语言(例如JavaScript),甚至是Objective C(在Swift上都是精神上的祖先),都需要在访问之前self而不是之后进行链接调用。 在调用超构造函数之前要求定义字段的选择背后的原因是什么?

4
在事件驱动的微服务架构中处理更改
我正在做一个研究项目,正在研究处理事件驱动的微服务体系结构中的更改的选项。 因此,假设我们有一个应用程序,其中有四个不同的服务。这些服务中的每一个都有自己的数据库来存储本地数据。 在此设置中,这四个服务使用事件总线相互通信。因此,当服务中发生某些事情时,它会发布一个事件。所有对该事件感兴趣的其他服务都将以自己的方式对其进行处理。 在那种情况下,架构中的不同服务需要就这些事件(属性等)的内容订立“合同”。因此,服务对这些事件具有“松散耦合的依赖性” 我的问题是: 我们如何应对这些事件的变化? 因此,假设服务A在应用程序中注册了新用户。因此,它发送一个“ UserRegistered”事件,服务B拾取该事件并对其进行处理,但是服务C小组的一些开发人员决定他们也需要注册用户的性别,因此该事件被更改,属性性别被添加到“ UserRegistered”事件。 我们如何确保服务B仍可以在不重新部署的情况下使用该额外属性来拾取同一事件? 还有其他方法可以解决此问题,然后对这些事件进行版本控制吗?

3
DI / IoC容器与工厂:我在哪里配置应用程序,为什么?
我试图弄清楚何时使用DIC / IoC注册表来配置我的软件以及何时使用工厂,以及这两种方法背后的原因。 我正在使用StructureMap作为我的DI容器(DIC),使用注册表很容易配置它。在DIC中,从某种意义上说,实际上所有注册的对象都是静态的,一旦配置了DIC并且在DIC中将它们配置为单例,就不需要在运行时更改/交换任何实现/实例。但是,由于我的软件(SW)将在不同的设备上运行,因此我确实需要根据运行我的SW的设备选择特定于设备的注册表,以便相应地配置硬件。 由于某些对象的构造需要读取配置文件,因此我正在使用工厂将这些实例返回给DIC,以便将配置的读取与对象的创建分开。我在DIC中为相应的插件类型注册了工厂吸气剂。 现在说我有一个插件类型IMotor与具体类型Motor1和Motor2,这应该由厂家来处理。现在,有两种方法可以决定如何配置设备: 我将有关运行SW的设备的信息传递给,MotorFactory并且它返回正确的电动机,Motor1或者Motor2。在这种情况下,决定的逻辑是在工厂内部。 我根据运行它,并创建两个工厂的设备配置DIC Motor1Factory和Motor2Factory,其中一个创建Motor1和其他 Motor2。在这种情况下,对于IMotor使用Motor1Factory或的设备特定的注册表,我会有不同的注册表项Motor2Factory。 现在我的问题是:这两种方法中哪一种更可取,为什么?在我看来,第一种情况并非一帆风顺,而且令人费解,因为我在整个代码库中扩展了决定实例化哪种类型的逻辑。在第二种情况下,由于我将需要(几乎)每种具体类型的工厂,因此我实际上在代码中增加了工厂的数量。当将抽象工厂添加到组合中时,这让我更加困惑。 再说一遍:什么时候应该使用一种方法?更重要的是:什么是决定走哪条路的好指标?

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.