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