软件工程

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

3
敏捷开发中的客户关系
我的管理层刚刚问了我在组织中(公认的简短)历史中前所未有的问题:“我们能为您提供什么帮助?” 同时,我们正在为一个相当新的客户开展几个大型项目,这些客户能够将需求推向项目中间是传奇。为这些人发展就像在流沙上踢踏舞。 似乎是向更敏捷方法转变的绝好机会。我知道我将要被问到的,而且我对此一无所知的是如何为此类项目报价/出价/开票。你每小时去一次吗?您会出价范围吗?冲刺收费吗? 更广泛地讲,敏捷宣言中写着“我们重视客户协作而不是合同谈判”的方面正在吓到我的管理层。您如何看待现实世界中渴望大量消费的客户?

18
当您想到一个好名字时,如何命名函数/变量/等?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 当您定义函数/变量/等时,不确定如何命名,该如何命名?您如何命名? 如果您在使用临时名称作为真实姓名之前将其用作真实姓名,那么您使用什么临时名称? 更新 我一直在使用类似的东西WILL_NAME_LATER,NEEDS_NAME或TO_BE_NAMED。我希望有一个采用的约定,实际上我希望,如果使用该采用的约定,IDE会在不更改名称之前突出显示该名称。

1
事件驱动和事件源之间有什么区别?
我正在研究域驱动设计(DDD),并且遇到了一些术语:事件驱动和事件源。我知道这与从生产者到消费者发布事件并存储日志有​​关,所以我的问题是: 事件驱动和事件源之间有什么区别?

8
暴露异步功能的接口是泄漏抽象吗?
我正在阅读《依赖注入原理,实践和模式》一书,并了解了泄漏抽象的概念,该概念在本书中有很好的描述。 这些天来,我正在使用依赖注入重构C#代码库,以便使用异步调用而不是阻塞调用。这样做时,我正在考虑一些接口,这些接口在我的代码库中表示抽象,并且需要重新设计以便可以使用异步调用。 例如,考虑以下接口,它代表应用程序用户的存储库: public interface IUserRepository { Task<IEnumerable<User>> GetAllAsync(); } 根据书中的定义,泄漏抽象是设计时考虑到特定实现的抽象,因此某些实现详细说明了抽象本身的“泄漏”。 我的问题如下:我们可以考虑以异步方式设计的接口(例如IUserRepository)作为泄漏抽象的示例吗? 当然,并非所有可能的实现都与异步有关:只有进程外实现(例如SQL实现)才需要同步,但是内存中存储库不需要异步(实际上实现接口的内存中版本可能更多)如果接口公开异步方法很困难,例如,您可能必须在方法实现中返回类似Task.CompletedTask或Task.FromResult(users)之类的东西。 您如何看待?

2
在DDD中,域服务是否本质上仅仅是门面和/或中介模式?
在域驱动设计中,域层可以具有多个(传统)服务。例如,对于用户域,我们可能有: 一个UserFactory,它以不同的方式构建User对象 一个用户存储库,负责与基础结构层中的持久性服务进行交互 域层中的UserService是仅仅是这两个服务和基础结构层的中介者和/或Facade,还是它还有更多内容?

4
在C / C ++中,应尽可能在参数和局部变量中使用'const'吗?
这个问题的灵感来自java中的一个问题final。 在C / C ++中,应const尽可能使用? 我知道已经有一个关于const在参数中使用的相关问题。不幸的是,这个问题及其答案不能完全回答我的问题,因为它仅与函数参数有关,但我也想了解其他情况(例如:局部变量)。 另外,几乎所有该问题的答案都说我们应该使用,const因为它包含有关变量可访问性的有用信息。但这似乎与在Java中使用final的答案相抵触,因为final如果其中不包含额外的信息,状态可能是多余的,因此应省略它以使代码简洁明了。 那么,我应该const尽可能使用吗?如果是这样,为什么constC ++中的建议final与Java中的建议不同?

5
函数调用对性能有多少影响?
对于代码模块化,可读性和互操作性,尤其是在OOP中,必须将功能提取到方法或函数中。 但这意味着将进行更多的函数调用。 将我们的代码拆分为方法或函数实际上如何影响现代*语言的性能? *最受欢迎的语言:C,Java,C ++,C#,Python,JavaScript,Ruby ...

2
Logger.getLogger(MyClass.class)是初始化log4j记录器的最佳方法吗?
此Mkyong教程建议以这种方式初始化记录器: @Controller public class WelcomeController { private static final Logger logger = Logger.getLogger(WelcomeController.class); // etc } 现在,假设您使用的所有其他类都具有记录器,它们将以相同的方式初始化其记录器。 我的问题是-这是最好的方法吗?似乎...重复。
13 java  logging 

6
存储三元或三态变量的最佳数据类型
免责声明:我知道数据类型有点受制于所使用的脚本/编程语言,我喜欢用Python编写;尽管我很高兴听到有关任何语言/实现的信息。 存储三态变量的最佳数据类型是什么?能够或代表积极,中立和消极的东西。 例如:整数-1,0,1。 优点:非常简洁。 Pro:可能有效,可以存储为单个2位带符号整数。 专业版:可用作刻度,例如浮点乘数。 实施例2: ,0,null(1或任何排列) 优点:非中立的用例可以是二进制的。 缺点:需要动态数据类型 缺点:可能不太简洁。 实施例3: ,+(空字符串),- 优点:非常简洁。 缺点:可以利用字符串逻辑来确定状态。 Pro ?:直观的图形表示。 也许有一些聪明的二进制逻辑可以做我什至无法想象的聪明事,也许有太多用例考虑。 另外,在调整三元状态以存储在数据库引擎中时,是否需要考虑任何因素?像Innodb供参考。

8
流和队列有什么区别?
流和队列有什么区别?它们都具有元素的有序集合的概念,但是倾向于具有不同的实现和“插入” /“提取”(流)与“入队” /“出队”(队列)的词汇表。这些可以互换吗?他们提出不同的概念或模式吗?如果是这样,有什么区别?

2
随机缓存过期
我一直在尝试使用随机缓存的到期时间,以避免单个请求强制一次更新多个事件的情况。例如,一个网页可能包含五个不同的组件。如果每个都设置为在30分钟内超时,则用户每30分钟将有很长的等待时间。因此,您可以将它们全部设置为15到45分钟之间的随机时间,以使得对于给定的页面加载,最多只有一个组件可以重新加载。 我正在尝试找到有关此主题的任何研究或指南,例如最佳方差参数。我确实记得看到过一篇有关Google(?)如何使用这种技术的文章,但是找不到它,而且关于该主题的文章似乎也很少。

1
jwt中“ aud”和“ iss”之间的区别
我想实现一个更强大的身份验证服务,这jwt是我要做的事情的很大一部分,而且我了解如何编写代码,但是在理解保留iss与aud声明之间的区别时遇到了一些麻烦。我知道,一个定义了颁发令牌的服务器,而一个则引用了打算使用的应用程序。但是我的理解是,我的听众和发行人是同一件事,myserver.com就是发行令牌,以便以后的人们myserver.com可以得到授权和认证。我想我看不到两种说法之间的区别,尽管我知道有一种。 有一篇很好的文章写在msdn 关于所有保留的索赔,这是我最困惑的地方,因为他们的发行人和受众完全不同。

4
域与数据持久层中的干净架构验证?
我正在研究干净的软件,因此,我极大地重新思考了如何设计和编写软件的大量方法。 不过,我仍在努力处理业务规则,例如“保存某些项目的更新,首先加载我有权查看/编辑的所有项目列表,确认该项目在列表中,并且该商品类别当前未被锁定(以及其他规则等)。”,因为这是(复杂但非典型的)业务规则,因此应在应用程序域中进行处理,而不是将业务逻辑推送到db / persistence层。 但是在我看来,为了有效地检查这些条件,通常最好使用精心设计的数据库查询来最好地处理它,而不是将所有数据加载到应用程序域中... 如果不进行过早的优化,有什么推荐的方法或鲍勃叔叔的文章处理这个问题?还是他会说“在域中进行验证,直到出现问题”? 除了最基本的用例之外,我真的在努力寻找任何好的示例/样本。 更新: 大家好,谢谢您的答复。我应该更清楚一些,我已经写了很长时间(主要是Web应用程序)软件,并且肯定已经经历并同意您共同描述的所有主题(通过后端验证,一般不信任客户端数据仅在需要时才追求原始效率,但是在可用时承认db工具的优势,等等),并且已经经历了开发人员学习生命周期的“全部整合”以“构建具有N层应用程序的大型胖控制器”代码趋势,现在真的很喜欢研究干净/单一责任的样式等,这主要是由于最近有一些项目随着项目的发展以及对客户的进一步要求逐渐演变为笨拙且分布广泛的业务规则。 特别是,我在构建REST的API面向客户和内部使用功能的背景下,看着清新的风格建筑,其中许多业务规则可能是多比基本上你在网上看到每一个例子更复杂(甚至由Clean / Hex体系结构专家自己完成)。 所以我想我真的是在问(并且没有清楚地说出)Clean和REST api会如何放置在一起,这些天您看到的大多数MVC东西都带有传入的请求验证器(例如.NET中的FluentValidation库),但是其中许多我的“验证”规则不是“这是少于50个字符的字符串”,而是更多的,“如果某个相关对象当前已被Team X锁定,则该调用此用户案例/交互者的用户可以对数据集执行此操作吗?直到本月下旬,等等”。。。那些涉及深层次的验证,其中适用于业务域对象和域规则的数量。 我是否应该将这些规则分解为特定类型的Validator-object类型,以与每个用例交互器一起使用(受FluentValidator项目的启发,但涉及更多的业务逻辑和数据访问),我是否应该将验证视为类似于Gateway,我应该将那些验证放入网关(我认为这是错误的)等。 作为参考,我会去像几篇文章这样,但马蒂亚不讨论验证了。 但是我想我的问题的简短答案很像我接受的答案:“这绝非易事,要视情况而定”。

1
如何表示我的MongoDB数据库的架构图?
我有一个MongoDB数据库,我想正确地记录其架构设计。我知道MongoDB是一个NoSQL数据库,本质上是无模式的,但是我确实通过我的应用程序强制执行一个模式,并且我希望用一种比打印findOne()结果更好的方式表示它。 我看到许多人使用ER或UML,但是我觉得将NoSQL数据库表示为关系数据库是不正确的,至少看起来很奇怪。 使用UML的示例:MongoDB:如何在论文中表示模式图? 我认为人们会使用不同的模型。我进行了搜索,到目前为止,所看到的是MongoVUE,它提供了一个不错的Tree视图来理解该模式,但是它不便于打印。 NoSQL世界还缺少我一些东西吗?还是应该休息并坚持使用传统的UML?

4
为集成测试选择名称
使用单元测试时,域很小,因此很容易。我使用了Osherove的methodName_conditions_result()方案,发现它很清楚。 但是通过集成测试,我觉得它会叫一个很长的名字,我该用什么代替methodName?如何命名集成测试类? 集成测试名称的真实示例非常受欢迎。我希望答案也能帮助我更好地理解这些测试。

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.