Web 应用程序中业务对象的生命周期

Life cycle of business objects in a web application

这是一个非常普遍的问题,涉及应该 运行 在公司内部网上的 Web 应用程序中的软件设计。基本设计很简单:我在服务器上有一个后端 (PHP),其中数据库 (MySQL) 保存应用程序的所有数据。该应用程序在公司中使用,应反映与员工相关的任务。前端网页 (HTML, CSS) 显示了一个 UI 用于处理员工数据等

这里的员工是一个基本的业务对象,用 PHP class 表示。当前端要求显示员工数据时,查询转到 php class,它从数据库加载员工数据,实例化员工对象并将员工数据发送回客户端。来自客户端的进一步查询涉及在员工对象中完成的一些逻辑,因此我想将刚刚实例化的员工对象保留在内存中并再次使用它。我想避免数据库访问加载员工数据,每次客户端发出请求时实例化对象。

所以我在服务器端 PHP 创建了一个对象管理器,它应该存储已经实例化的业务对象并按需提供它们或在需要时加载所需的对象(延迟加载)。但我意识到(当然)服务器不会在来自客户端的不同 http 请求之间将实例保存在内存中,因此我的对象管理器不起作用。 在桌面应用程序中这可行,但在 Web 应用程序中不行。对于 Web 应用程序设计,这是一种糟糕的方法吗?在每次客户端请求时加载和实例化业务对象是否正常?

另一种可能性是在javascriptclass中描述和实例化员工对象,并在客户端执行此逻辑,对象可以保存在内存中,不是吗?但我认为最好在服务器上执行业务逻辑,以免给客户端带来太大压力。

I wanted to avoid the database access to load the employee data, instantiate object every time the client does a request.

如果这确实是您环境中的一个要求,那么您将面临巨大的复杂性。我将对重新读取数据的实际成本进行基准测试,并判断是否真的需要增加复杂性。

您正在尝试实施对象缓存。如果您解决了在 HTTP 请求之间将对象保存在内存中的问题(可以做到),您很快就会发现并发性问题(多个客户端作用于您缓存的对象)和事务性问题(对象缓存的更改)必须以事务一致的方式写入数据库,以及其他问题。

如果您确实需要此功能,请查看现有的对象缓存实现。