Questions tagged «application-design»

应用程序设计涵盖了项目的整个预实施阶段,并包含概念化体系结构,其组件,每个组件之间的交互,数据流以及要实现的过程。

9
数据库应实现多少业务逻辑?
我参与过一些项目,其中大多数业务逻辑是在数据库上实现的(主要是通过存储过程)。另一方面,我从其他程序员那里听说这是一个不好的做法(“那里有数据库来存储数据。其余的则由应用程序来完成”)。 通常,哪种方法更好? 我能想到的在数据库中实现业务逻辑的优点是: 集中业务逻辑; 应用程序类型,编程语言,操作系统等的独立性; 数据库不太容易进行技术移植或大型重构(AFAIK); 无需重新进行应用程序技术迁移(例如:.NET到Java,Perl到Python等)。 缺点: 由于缺乏面向应用程序的语言所提供的库和语言构造,SQL对于业务逻辑编程而言效率较低,并且更为复杂。 通过库更难(如果可能的话)重用代码; 生产效率较低的IDE。 注意:我正在谈论的数据库是关系型,流行的数据库,例如SQL Server,Oracle,MySql等。 谢谢!

5
构建单页Web应用程序的优缺点
我正在为正在进行的辅助项目进行原型设计/概念验证阶段的结尾,并试图决定一些更大的应用程序设计决策。该应用程序是一个专为敏捷开发流程量身定制的项目管理系统。我需要做出的决定之一是是否要使用传统的多页应用程序还是单页应用程序。 目前,我的原型是传统的多页设置,但是我一直在寻找ribs.js来清理某些结构并将其应用于Javascript(jQuery)代码。骨干.js似乎可以在多页应用程序中使用,但在单页应用程序中却更具光芒。我试图提出使用单页应用程序设计方法的优缺点列表。到目前为止,我有: 好处 所有数据都必须通过某种API才能获得-这对我的用例来说是一个很大的优势,因为无论如何我都希望为我的应用程序提供一个API。现在,大约60-70%的我获取/更新数据的调用是通过REST API完成的。做一个单页应用程序将使我可以更好地测试我的REST API,因为应用程序本身将使用它。这也意味着随着应用程序的增长,API本身也将增长,因为这就是应用程序所使用的。无需维护API作为应用程序的附件。 响应速度更快的应用程序-由于将初始页面之后加载的所有数据保持在最低限度并以紧凑格式(例如JSON)进行传输,因此数据请求通常应该更快,并且服务器的处理量会稍少一些。 缺点 代码重复-例如,模型代码。我将不得不在服务器端(在这种情况下为PHP)和Javascript的客户端上创建模型。 Java语言中的业务逻辑-我无法给出任何具体示例说明为什么这样做会很糟糕,但是我觉得所有人都可以阅读的Java语言中的业务逻辑对我来说是不合适的。 Javascript内存泄漏-由于页面永远不会重新加载,因此可能发生Javascript内存泄漏,而且我什至不知道从哪里开始调试它们。 还有其他一些东西是双刃剑。例如,对于单页应用程序,为每个请求处理的数据可能要少得多,因为该应用程序将要求特定请求所需的最少数据,但是这也意味着可能会有更多的小请求服务器。我不确定这是好事还是坏事。 在决定应该以哪种方式进行项目时,应牢记单页Web应用程序的哪些优点和缺点?


1
我自己开发系统时,应该使用微服务吗?
我正在开始一个新的项目,尽管可能需要一个或两个其他开发人员将现有的应用程序或简单的脚本集成到主项目中,但我几乎将是该项目的唯一开发人员。该项目需要处理小规模的批量和流数据的摄取/处理,以及事件驱动和按需代码执行。框架的某些部分受CPU限制,而某些部分则受I / O限制。大多数数据必须存在于单个计算机上,但是我们能够创建集群并连接虚拟机以增加可用的计算能力。可能会有一个或多个小型Web应用程序依赖于此核心框架提供的服务。主要语言将是适用于几乎所有内容的Python。 我的问题是,考虑到我将自己完成大部分开发工作,我是否应该采用微服务方法来进行此类工作或坚持使用单一应用程序。我的想法是,微服务(使用Nameko)在具有不同执行模型(数据管道,事件启动,按需,Web应用程序等)的框架元素之间提供了自然的分隔,并提供了一种清晰的方式来分配工作负载和跨多个流程的沟通。我担心的是,我可能最终会使用一个Kubernetes集群来管理(我熟悉Docker,但对于Kubernetes来说还很陌生),为了促进系统运行,需要多个服务(rabbitmq,redis等),并可能有很多小的代码块来实际实现我们所需要的所有必要功能 对于只有一个开发人员的项目,微服务是否仍会简化这样的复杂系统的开发和维护?我是否应该考虑使用其他方法/系统/框架,或者减少以这种方式设计系统所涉及的开销?

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

7
从GUI开始构建应用程序是否有用?
应用程序设计和开发的趋势似乎始于“胆量”:领域,然后是数据访问,然后是基础结构等。GUI似乎通常会在此过程的后期出现。我想知道首先构建GUI是否有用... 我的基本原理是,通过至少构建一个原型GUI,您可以更好地了解幕后需要做什么,因此可以更好地开始在域和支持代码上进行工作。 我可以看到这种做法的问题在于,如果尚未编写支持代码,那么GUI层实际上就不会做很多事情。也许构建模拟对象或一次性类(有点像在单元测试中所做的那样)将提供足够的基础来最初构建GUI。 对于实际项目,这可能是可行的想法吗?也许我们可以将GDD(GUI驱动开发)添加到首字母缩写稳定...

4
如何有效搜索某个地标范围内的所有地标?
我正在尝试从一个地理搜索项目开始,该项目将查找特定地标的10公里/英里(对于这个故事而言并不重要)中的所有地标。 例如,假设我有一个包含1,000,000个地标的数据库。为了找到具有特定坐标的地标10英里范围内的所有地标,我必须计算搜索到的地标与1,000,000个地标之间的距离。 有更好的方法吗? 我当时想过的替代方法是对地标进行分类,例如国家,地区,城市,邻里,商业,历史等,以便企业可以成为邻里或城市的一部分。城市是一个地区,一个国家等的一部分。这可以缩小计算范围,但是为了快速,准确地进行搜索,它仍然看起来像需要做很多工作。 Google Maps API可以提供帮助吗?

2
Django应用策略
我在Django项目上工作了一段时间,该项目最近有所增长。我一直在思考使用哪种策略使其更易于处理。我想得到一些输入的一件事是,如果我应该将我的应用程序拆分为几个较小的应用程序。这将使我的视图和模型文件更小,并分离出一些问题。 让我感到困扰的一件事是,在我的应用程序中,我将有几种将在整个应用程序中使用的辅助方法。此外,某些模型还必须在应用程序之间共享/使用。这有意义吗?这与我希望通过将我的应用程序拆分为几个较小的应用程序来实现的关注点分离并不合适。在各个应用程序之间共享辅助方法,模型等的好方法是什么?

2
是否有通常用于创建大型功能编程应用程序的特定工作流程或设计模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我已经探索Clojure已有一段时间了,尽管我没有在任何重要的项目中使用过它。基本上,我对语法和某些惯用法已经很熟悉了。来自OOP的背景,Clojure是我非常关注的第一种功能语言,我自然对功能处理方式不太满意。 也就是说,创建大型功能应用程序时是否存在特定的工作流程或设计模式?我真的很想开始“真正地”使用函数式编程,但是由于我目前的专业知识不足,恐怕会导致史诗般的失败。 “四人帮”是面向OO程序员的标准,但是是否有类似的东西更针对功能范例呢?我发现的大多数资源都具有出色的编程能力,但它们并没有退缩以提供更广泛,更体系结构的外观。

5
单个故障是否会使批量操作失败?
我正在使用的API中有一个批量删除操作,该操作接受ID数组: ["1000", ..., "2000"] 我可以按照自己的意愿随意执行删除操作,因此我决定使整个事务具有事务性:也就是说,如果单个ID无效,则整个请求将失败。我将其称为严格模式。 try{ savepoint = conn.setSavepoint(); for(id : IDs) if( !deleteItem(id) ){ conn.rollback(savepoint); sendHttp400AndBeDoneWithIt(); return; } conn.commit(); } 备选方案(在软件套件中的其他位置实现)是尽我们所能在后端进行操作,并报告阵列中的故障。该软件的这一部分处理的请求较少,因此从理论上讲,响应不会成为一个巨大的数组。 资源贫乏的服务器中最近发生的一个错误使我再次查看代码,现在我在质疑最初的决定-但是这次,我更多地是出于业务需求而不是最佳实践的动力。例如,如果我未能通过整个请求,则用户将不得不重试,而如果删除了许多项目,则用户可以完成操作,然后要求管理员执行其余操作(在我修复错误的同时) !)。这将是许可模式。 我尝试在网上寻找有关此事的一些指导,但我空手而归。所以我来找你:这种性质的批量操作最期望什么?我应该坚持更严格,还是应该更宽容?

5
如何处理“这只是一个小应用”?是的,对吗?
好的,我已经遇到过很多次了,但是在这种情况下,情况有些过分夸大了。 客户说: “嘿,您能给我们这个小模块来完成这个小任务吗?” 我: “没问题”。 因此,基于预算和约束等因素,我跳过了一些架构设计工作,并一头扎进去,不费吹灰之力。 然后,他们要求另一个模块。还有一个。和一些增强。多年来,这一切都非常缓慢地提醒您。在不知不觉中,您就拥有了这个可怕的架构可怕的应用程序。 当您被要求做一些小事情时,您会怎么做?您不知道它是否会继续增长...客户是否会继续要求添加(它们也不这样做)。 您不能对它进行过度的架构,因为它毕竟只是一个小应用程序,如果您说(因为我知道所有声音),它们就会移到其他地方“以防万一,让我们将此事物设计为顶层在线安全性和关注点分离。实际上,让我们使用一个依赖项注入工具,它将使这件事真是太棒了……等等。” 他们会说“是的”,然后去找别人。 预算,时间和感知与架构应用程序本身一样重要。 应该如何处理? 我猜这个问题真的可以归结为:“如果您没有所有看起来像是小型应用程序的最终结果的所有信息,那么如何避免(或减轻)早期的架构和设计决策将是完全可以的?以后没用?

2
软件是否应该有一个“数据卫生”索引,以表明程序的清洁程度?不留下临时文件等
软件是否应该有一个“数据卫生”索引,以表明程序的清洁程度?不创建未使用的临时文件,注册表项,环境变量等。 例如,在Windows中的“用户”文件夹中查看,您将看到应用程序使用的所有工作空间文件。 例如,这使得很难知道什么需要备份以及什么可以在机器生成时丢弃。

3
什么是“应用程序模型”?
目前,我正在研究.NET Core,在最早介绍.NET Core的早期文档中,我们看到了有关许多不同垂直领域的话题。在这张图中可以看出: 在所有垂直领域中,我们都看到了运行时,框架,但是还有“ App Model”。 此外,在观看有关.NET Core CLI的视频时,据说“ DNX拥有自己的应用程序模型”,并且“ .NET Core CLI为跨平台.NET库和控制台应用程序开发创建了一个.NET应用程序模型”。 我的问题是:这是什么“应用程序模型”?真正的应用程序模型是什么,具体由什么构成?
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.