本文翻译自土牛Halil ibrahim Kalkan的《Mastering ABP Framework》,是系列翻译的起头,适合ABP开发人员或者想对ABP框架进行深入演进的准架构师。

在深入挖掘ABP 框架之前,我想先介绍开发现代企业 Web 解决方案的挑战,以了解为什么我们需要ABP 框架。让我们从架构大局开始:

架构搭建的挑战

在开始编码之前,我们需要为解决方案创建一个基础。这是构建软件系统最具挑战性的阶段,在此阶段做出的任何决定都可能会影响应用程序的整个生命周期。

有一些常见的、知名的、系统级的架构模式,例如单体架构、模块化架构和微服务架构。不同的架构选型会决定后续的团队组织架构、部署和扩展,所以我们要根据需求尽量做最优的选型。

另外,软件开发模型例如命令和查询职责分离(CQRS)、领域驱动设计(DDD)、分层架构和清洁架构将决定您的基础代码结构。

在这个阶段,我们还需要决定将使用哪种语言、框架、工具和库。

所有这些决策都不是一件容易的事情。

我们可以问自己一个问题:我们团队的软件架构师和开发人员具备以上这些能力和经营了吗?

现实是并非所有团队成员都具有丰富的经验和知识水平。我们需要从战略上制定标准规范,在战术上实践最佳编码。

重复造轮子!

不要重复自己(DRY) 是软件开发的关键原则。

我们先思考一个问题:为什么我们在构建软件时会重复自己呢?

身份验证是每个软件都需要的功能,包括单点登录、基于令牌的身份验证、社交登录、双因素身份验证、忘记/重置密码、电子邮件激活等等,几乎所有的软件项目或多或少都有相似的身份验证需求。与其从头开始构建所有这些,不如复用现有的解决方案(例如云服务)更好,不管在实战还是安全方面都更加稳定成熟。

还有一些非功能性需求,例如异常处理、验证、授权、缓存、审计日志和数据库事务管理,是代码重复源头。这些关注点被称为横切关注点,应该在每个 Web 请求中处理。

当您集成到第三方系统(例如 RabbitMQ 和 Redis)时,您通常会创建抽象和装饰器。通过这种方式,您的业务逻辑与这些基础设施组件隔离开来。此外,您不会在系统中到处重复相同的连接、重试、异常处理和日志记录逻辑。

拥有一个预先构建的基础架构来自动执行这些重复性工作可以节省您的开发时间,以便您可以专注于您的业务逻辑。

构建 UI 基础

用户界面(UI)也是应用的基础。一个过时且无法使用的 UI 不会那么吸引人,即使它在幕后具有出色的商业价值。

虽然每个应用的 UI 功能和要求各不相同,但一些基本结构是常见的,例如警报、按钮、卡片、表单元素、选项卡和数据表。您可以使用 HTML/CSS 框架,例如 Bootstrap、Bulma 和 Ant Design,而不是为每个应用程序创建一个设计系统。

几乎每个 Web 应用程序都有响应式布局,主菜单、工具栏、页眉和页脚、自定义颜色等。您将需要为应用的页面和组件实现基本 UI 工具包。这样,UI 开发人员可以创建一致的 UI。

到目前为止,我们介绍了一些常见的基础架构需求,它们大多独立于任何业务应用。下面讨论常见的业务需求。

实现常见的业务需求

虽然每个应用系统是独特的,而且其价值来自于独特性,但是每个企业系统都有一些基本的配套需求。

基于权限的授权系统是这些基本要求之一。它用于控制应用的用户和客户端的权限。如果您想自己实现这一点,您应该创建一个包含数据库表、授权逻辑、权限缓存、API 和 UI 页面的端到端解决方案。但是,这样的系统非常通用,完全可以开发为可重用模块,由多个应用共同使用。

另外,许多系统需要审计日志报告、租户和订阅管理(针对 SaaS 应用)、语言管理、文件上传和共享、多语言管理和时区管理等功能。除了预先构建的应用功能之外,可能还有低级要求,例如实现软删除模式和在应用程序中存储二进制大对象(BLOB) 数据。

所有这些常见的需求都可以从头开始构建,但是这需要我们耗费巨大的成本和精力,如果你的团队没有经验丰富的架构团队,还不一定能完成得很好。如果这些功能不是公司的主要价值,我们完全可以考虑开源社区预构建的模块和库,并根据特定的要求进行定制。

结尾

  如果你也在学习ABP,也有遇到问题需要咨询,欢迎你加入ABP的QQ群(免费)

或者加入我的知识星球(收费),体验更加及时和全面的服务:

企业级 Web 开发的挑战的更多相关文章

  1. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  2. web前端学习路线(含20个真实web开发项目集合)

    目前web前端工程师日均岗位缺口已经超过50000,随着互联网+的深入发展,html5作为前端展示技术,市场人才需求量将呈直线上涨. Web前端工程师的岗位职责是利用HTML.CSS.Java.DOM ...

  3. CUBA Platform —— 开源的、可靠的企业级应用开发利器

    原文:CUBA Platform: An Open-Source Java Framework for Rapid Application Development 翻译:CUBA China CUBA ...

  4. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  5. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  6. 2016 Web开发资源工具大搜罗

    来源于:https://zhuanlan.zhihu.com/p/22730771 作者:余博伦链接:https://zhuanlan.zhihu.com/p/22730771来源:知乎著作权归作者所 ...

  7. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

  8. 前端文摘:Web 开发模式演变历史和趋势

    今天的<前端文摘>给大家分享一篇玉伯的文章.文章详细介绍了 Web 开发的四种常用模式以及未来可能成为流行趋势的 Node 全栈开发模式,相信你看了以后一定会有收获. 您可能感兴趣的相关文 ...

  9. Web开发人员常犯的10个错误

    说到开发一个运行在现代网络中的网站:Web开发人员需要选择虚拟主机平台和底层数据存储,准备编写HTML.CSS和JavaScript用的工具,要有设计执行方式,以及一些可用的JavaScript库/框 ...

随机推荐

  1. path()的name属性,有什么用?

    官网(参考:命名 URL 模式) 命名 URL 模式: 为了完成反向解析 URL ,你需要像上面那样使用 命名 URL 模式 .用于命名 URL 的字符串可以包含任意字符,并不仅限于 Python 里 ...

  2. MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题

    JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...

  3. Mybatis 是如何进行分页的?分页插件的原理是什么?

    Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内 存分页,而非物理分页.可以在 sql 内直接书写带有物理分页的参数来完成物理分 页功能,也可以使用 ...

  4. 请简述下你在哪些场景下会选择 Kafka?

    日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop.HBase.Solr等. 消息系统:解耦和生产者和消费者.缓 ...

  5. spring集成mongodb简单使用和测试方式

    @EnableMongoRepositories @ComponentScan(basePackages = "cn.example") @Configuration public ...

  6. UML 中有哪些常用的图?

    UML 定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结 构,包括:用例图(use case diagram).类图(class diagram).时序图(sequence diagr ...

  7. 什么是 Aspect?

    aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包 括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横 切逻辑编织到 ...

  8. 使用 Docker, 7 个命令部署一个 Mesos 集群

    这个教程将给你展示怎样使用 Docker 容器提供一个单节点的 Mesos 集群(未来的一篇文章将展示怎样很容易的扩展这个到多个节点或者是见底部更新).这意味着你可以使用 7 个命令启动整个集群!不需 ...

  9. 学习GlusterFS(一)

    一.概述 1.GlusterFS是集群式NAS存储系统,分布式文件系统(POSIX兼容),Tcp/Ip方式互联的一个并行的网络文件系统,通过原生 GlusterFS 协议访问数据,也可以通过 NFS/ ...

  10. USART_GetITStatus()和USART_GetFlagStatus()的区别

    USART_GetITStatus()和USART_GetFlagStatus()的区别 都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启 ...