这是一个关于应该在公司内部网上运行的Web应用程序中的软件设计的普遍问题。基本设计很简单:我在服务器上有一个后端(PHP),其中数据库(MySQL)保存应用程序的所有数据。该应用程序在公司中使用,应反映与员工相关的任务。前端网页(HTML,CSS)显示用于操作员工数据等的UI。
一个基本的业务对象是员工,它由一个PHP类表示。当前端要求显示员工的数据时,查询将转到 php 类,该类从数据库加载员工数据,实例化员工对象并将员工数据发送回客户端。来自客户端的进一步查询涉及在 employee 对象中完成的一些逻辑,因此我想将刚刚实例化的 employee 对象保留在内存中并再次使用它。我想避免数据库访问来加载员工数据,每次客户端执行请求时实例化对象。
因此,我在服务器端的PHP中创建了一个对象管理器,它应该存储已经实例化的业务对象,并按需提供它们或在需要时加载所需的对象(延迟加载)。但我意识到(当然)服务器不会在来自客户端的不同 http 请求之间将实例保留在内存中,所以我的对象管理器不起作用。在桌面应用程序中,这将起作用,但在 Web 应用程序中则不行。对于 Web 应用程序设计来说,这是一种糟糕的方法吗?在每个客户端请求上加载和实例化业务对象是否正常?
另一种可能性是在javascript类中描述和实例化员工对象,并在客户端执行此逻辑,对象可以保存在内存中,不是吗?但我认为最好在服务器上做业务逻辑,不要给客户端带来太大的压力。
我想避免数据库访问来加载员工数据,每次客户端执行请求时实例化对象。
如果这确实是您环境中的一项要求,那么您将面临非常复杂的问题。 我会对重新读取数据的实际成本进行基准测试,并判断是否真的需要增加的复杂性。
您正在尝试实现对象缓存。 如果解决了在 HTTP 请求之间将对象保留在内存中的问题(可以这样做),您很快就会发现并发性问题(多个客户端对您缓存的对象进行操作)和事务性问题(对对象缓存的更改必须以事务一致的方式写入数据库,以及其他问题。
如果确实需要此功能,请查看现有的对象缓存实现。