软件工程

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

1
划分开发堆栈-对角线?
我们正在进行一个新项目,目前开发人员已分为两个团队,即团队A和团队B。该项目有两个部分,需要在整个开发堆栈中进行开发。堆栈的简化示例如下所示: 项目的每个部分都需要在整个堆栈上进行开发,因此我通常希望使用完整的堆栈开发人员方法,这就是我们如何分解团队B中的工作,设计和设计不同部分之间的交互的方式。 但是,我最近了解到,团队A要负责堆栈的某些部分,他们提议在两个团队之间进行划分,其中数据抽象层(并将内容放入数据层)由团队B没有任何发展。这种鸿沟看起来类似于: 对我来说,这感觉很不自然。每个团队都有不同的目标和时间表来实现这些目标,但是B团队将依赖于A团队来实现功能。提出的解决方案是预先定义通用接口(该项目可能需要2年的时间,因此可能会很多)。尽管有自己的目标,团队A仍将尽早为这些接口开发所需的位,而团队B则在短期内取消所有呼叫,以便他们继续前进。 我对此方法感到担忧: 接口可能会更改,并且组A可能没有带宽或时间来适应不断变化的需求。 A团队代码中的错误可能会阻止B团队前进,并且由于A团队的优先级队列不同,它们可能也不是解决这些错误的优先事项。 团队之间缺乏知识传播-团队B可能无法完全了解幕后情况,因此可能会做出糟糕的设计决策。 已经提出,该行业中的许多公司都有子团队,并且必须能够处理此问题。根据我的理解,通常团队会按照最初的期望进行拆分(全栈),或者通过如下分解技术栈: 因此,我有兴趣了解其他行业的情况。大多数拆分是垂直/水平的吗?对角线分割有意义吗?如果发生对角线分裂,我的担忧似乎是成立的,并且B团队还有其他需要关注的问题吗?请注意,我可能要对B团队的成功或失败负责。

1
将ASP.NET IdentityUser与我的其他实体分开
我有一个ProjectName.Core库,其中包含我的所有业务逻辑以及我的实体及其行为。当前与Entity Framework或任何其他DAL没有任何关系,因为我喜欢将这些内容分开。实体框架配置(使用Fluent API)位于ProjectName.Infrastructure项目中,以便将实体推入EF。基本上,我会朝着类似洋葱的架构的方向发展。 但是,将ASP.NET Identity框架添加到组合中时,我必须使我的ApplicationUser实体从IdentityUser该类继承,但是我的ApplicationUser类与其他实体有关系。在继承时,IdentityUser我在实体项目中引入了对Entity Framework的引用,这是我不想这样做的地方。将ApplicationUser类从实体项目中拉出并放入Infrastructure项目中(因为它使用的是基于Entity Framework的身份系统)将导致循环引用,因此也不可行。 有没有什么办法可以解决,所以除了不使用ASP.NET Identity之外,我还可以保持两层之间的清晰分隔?

3
Web服务之前,桌面应用程序如何与远程服务器通信?
我对桌面应用程序没有太多的经验,但是如果必须创建客户端服务器桌面应用程序,则可以通过Web服务来进行数据访问。我相信通过Web服务进行的数据访问可提供安全性-我不需要传递数据库服务器的用户名和密码等。 在使用Web服务之前,数据库应用程序是如何做到这一点的?是否已将所有重要的数据库信息传递到桌面应用程序的安装中?如果是这样,程序员如何管理安全性方面?还是程序员使用类似于Web服务的内容?

1
使用Haskell类型类强制交换
我想为可以交叉在一起的几何对象定义一个类型类: class Intersect a b c | a b -> c where intersect :: a -> b -> c -- Language extensions: -XMultiParamTypeClasses, -XFunctionalDependencies 这个想法是要有一个通用的交集函数,可以处理不同类型的对象。可以想象这样的情况 instance Intersect Line Plane (Maybe Point) where ... instance Intersect Plane Plane (Maybe Line) where ... 但我也想声明交集是可交换的: instance (Intersect a b c) => Intersect b …

2
为什么在两个看似完全不同的上下文中使用'out'关键字?
在C#中,out可以两种不同的方式使用关键字。 作为参数修饰符,其中参数通过引用传递 class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } 作为类型参数修饰符,以指定协方差。 // Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : ICovariant<R> { } …

6
弥合抽象机器和计算机体系结构之间的鸿沟?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我总是感到抽象机器(例如图灵机)和计算机体系结构(包括虚拟机的体系结构,冯·诺伊曼的体系结构)之间没有联系。所以我想知道它们之间的关系吗?一个如何影响另一个?参考文献也被赞赏。谢谢。

4
在for循环注释中使用此额外变量有什么好处?
我在一个正在处理的大型项目(伪代码)中发现以下循环注释: var someOtherArray = []; for (var i = 0, n = array.length; i < n; i++) { someOtherArray[i] = modifyObjetFromArray(array[i]); } 引起我注意的是这个额外的“ n”变量。我以前从未见过这样写过的书。 显然,在这种情况下,没有理由不能以以下方式编写此代码(我已经很习惯了): var someOtherArray = []; for (var i = 0; i < array.length; i++) { someOtherArray[i] = modifyObjetFromArray(array[i]); } 但这让我思考。 编写这样的for循环是否有意义?这个想法浮现在脑海,“数组”的长度在for循环执行期间可能会改变,但是我们不想循环到比原始大小还远的地方,但是我无法想象这种情况。 在循环内缩小数组也没有太大意义,因为我们很可能会得到OutOfBoundsException。 是否有已知的设计模式在其中使用此注释? 编辑 如@ Jerry101所述,原因是性能。这是我创建的性能测试的链接:http …


4
私有方法何时应采用公共路线访问私有数据?
私有方法何时应采用公共路线访问私有数据?例如,如果我有这个不可变的“乘数”类(我知道有点作弊): class Multiplier { public: Multiplier(int a, int b) : a(a), b(b) { } int getA() const { return a; } int getB() const { return b; } int getProduct() const { /* ??? */ } private: int a, b; }; 我可以通过两种方式实现getProduct: int getProduct() const { return a * b; …

1
同型类型理论在编程中的实际含义是什么?
来自JavaScript / Ruby世界之后,我才开始学习Haskell。我遇到过https://github.com/HoTT和Homotopy类型理论书,我非常想读。 但是,我将在学习过程中学习数学和类型理论的概念,因此,我似乎需要很长时间才能了解同构类型理论对程序员的意义。 对于外行来说,您能否描述同型类型理论对编程的影响?例如,这会使某些内容更容易编写吗?如果是这样,那件事呢?还是会允许您在编程中做以前不可能做的新事情?如果是这样,那件事呢? 谢谢,非常期待能在更基本的层面上解决问题。

2
使用MongoDB作为变更日志的两个系统之间的同步
我们正在开发两个相关的系统。其中一个(A)将安装在我们客户的机器上。其余(B)将由我的组织使用。 每个系统都有其自己的数据库(关系型),并且其架构也不同。但是,两个系统都必须同步。另外,必须将B中的某些更改导出到所有A类系统,而其他仅导出到特定的系统。 有些客户没有Internet连接,因此在某些情况下,必须通过交换文件来完成同步。 因此,我们正计划解决以下问题: 每个系统都维护其数据库的变更日志。我们计划用MongoDB实施它。 当系统初始化同步过程时,它将从日志中检索所有进行的更改。如果系统是B,则检索到的更改取决于目标。然后,系统以XML格式对它们进行序列化,最后(通过文件或网络)发送它们。 当另一端点接收到变更集时,它将对它们进行反序列化。然后,系统对数据进行一些必要的转换,最后记录所做的更改。在这一步中,如果有必要,系统必须解决可能存在的冲突。 最后,接收器系统发送其更改(以及其他解决冲突的产品)。 这种方法可行,可扩展且优雅吗?您将进行哪些更改或添加?

5
谁在S​​crum中撰写技术性的“用户故事”
我知道产品负责人应该在Scrum中撰写用户故事。 用户故事正在描述最终用户的功能。 但是谁描述了需要在技术上开发什么以及如何实现它 以及与scrum有关的信息存储在哪里? 我真的很感兴趣! 当开发人员开始实施该故事时,我发现我们公司非常缺乏知识,但他们不知道如何执行该故事! 例如,他们不得不处理传统的COM API,却不知道如何处理它,或者他们对WPF / WEB或其他技术不熟练。 Scrum如何帮助人们从用户故事入手?
11 scrum 

2
在ASP.NET MVC中,视图模型是否应具有ID?
在开发允许更新模型的ASP.NET MVC应用程序时,您需要某种方式来了解如何获取更新的视图模型并将其与现在更新的模型匹配。似乎有几种不同的方法可以做到这一点,我想知道这些方法中是否有任何一种不正确的MVC(就像让控制器存储应在模型中存储的数据是不正确的MVC)? 所有视图模型都有一个ID:优点 始终确保可以匹配您的模型。 缺点 您必须非常小心,不要更改任何ID,否则您可以让用户更新他们不应该访问的行。 只有最基本的视图模型具有ID:优点 避免用户更新他们不应访问的数据所需的检查要少得多。 缺点 跟踪哪种视图模型与哪种模型匹配要困难得多。 您仍然必须检查一些具有ID的视图模型,以确保用户不会更新他们不应该访问的数据。 没有视图模型具有ID: 优点 无需检查ID以进行更新。 缺点 您必须放弃无国籍状态。 所以我有两个问题。 首先,是否有正确/错误的选择?(如果不是,则表示选择只是一个见解,我的第二个问题是基于见解,应该忽略。) 其次,如果有正确/错误的选择,那是什么? 为了澄清评论,我在说的是当您拥有一个类似于数据库对象的视图模型时。 认为: public class InvoiceViewModel //Does not have ID, does not relate to model. { public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model. public AddressViewModel …
11 mvc  asp.net-mvc 

1
是否有诸如知识共享许可之类的隐私政策许可证?
我最近读过《阅读一年中遇到的隐私权政策》将花费76个工作日,而这真是太糟糕了,感到非常震惊。所以我想如何可以改善它。 知识共享许可很不错,因为它们是模块化的: CC:表明它是一个创用CC许可 [-BY]:归因 [-NC]:非商业 [-ND]:无导数 [-SA]:分享相同 我认为最终可以制定出这样的模块化隐私策略。最终,采用表格政策会更好: 收到的信息 您提供给我们的信息:姓名,内容,交易信息,位置,朋友 使用服务时收集的信息:网站活动信息,访问设备和浏览器信息,Cookie信息 第三方:... 信息使用 管理服务 出售给第三方 联系你 ... 是否有尝试创建这种模块化/结构化(最终是机器可读的)隐私策略?
11 legal  privacy 

1
λ演算本质上是什么?
我有一个关于λ微积分的哲学问题。 当您探索λ微积分时,您会惊讶地看到在那里可以做的所有事情。您可以定义整数,算术运算,布尔值,if-then-else语句,循环,递归函数等。我相信它已经被证明在计算上是完整的。 但另一方面,如果考虑使用λ微积分中的函数,您会意识到唯一可以做的就是向它提供一个函数,然后它返回另一个函数。这个过程永无止境。 那么如何从计算中提取结果呢? 假设表达式的结果是function f。您要检查是否f符合您的期望。您可以对其进行测试,采用您知道的功能,应用于f它并接收g。但是要检查g是否正确,您现在需要验证是什么g。然后您从头开始。那么,您如何得知f? 在我看来,您可以用一个函数,身份函数替换λ演算中的所有函数I = λx.x,并且一切仍然按λ演算中所述工作。教堂数字3给定f并x返回f(f(f(x)))。但是由于f并且x只能是I,它返回I。 I应用于I并且I还返回I。因此I满足的定义3。在“布尔” (λxy.x)和(λxy.y)需要2个参数,这将是I与I这样两个布尔值将会返回I。尽管它们完全按照其定义运行,但每个都等同于标识。 那么,您如何发挥作用呢?您如何证明λ微积分处理的不仅仅是一个函数? 有身份的概念吗?您可以立即识别功能而不进行评估吗?我相信已经证明没有办法测试2个函数是否相等。 还是λ微积分不是功能,而是功能的形式描述?这将意味着λ表达式不仅定义函数的功能,而且还定义函数操作的数据。所以,当你写A B,你并不适用A于B,但你申请由字符串描述的功能A的函数的正式定义包含在B返回另一正式定义。 λ演算中实际上发生了什么?它处理的数学对象是什么? 跟进: 好的,从下面的答案看来,λ演算似乎不是关于数学意义上的函数,而是关于可以表示为λ表达式的函数子集。甚至更多关于操纵λ表达的信息。

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.