我希望你们能帮我解决我目前面临的一个难题,我目前正在研究一个现有的web应用程序项目,其中一个要求是我们必须集中伐木。应用程序是由客户层(即视图)、服务层、业务层和DAO层组成的分层应用程序。
当前,应用程序中的日志记录是由控制器方法处理的,每个控制器方法都需要记录一些信息,通过调用日志函数手动记录数据。这些控制器方法处理的请求来自许多不同的客户端来源,包括移动设备(如电话)、web浏览器、web服务等。目前,需要记录的所有数据都被捕获在一个通用对象中,该对象被传递给日志方法,以便将这些属性保存到DB表中。
问题是,这个通用对象正是那个,一个通用对象。它用于许多其他任务,包括日志记录、搜索和许多其他任务。当这个通用对象用于日志记录时,除了两个属性之外,用于填充通用对象(在日志记录的情况下)的大多数属性来自请求,即( HttpServletRequest对象)。由于这个对象的多功能性,这个通用对象有可能被滥用。因此,我们希望摆脱这个通用对象,并为专门化的tasks.In创建专门的对象--在日志记录的情况下,我们已经决定创建一个日志对象,我们将使用该对象来保存我们需要记录的数据。我们将使用Spring影响日志记录
难题是这个
1)如果我们使用控制器来设置我们想要记录的新的专门日志对象的属性,然后使用AOP通知,那么在控制器方法执行完之后,检索日志对象以保持持久性。
或
2)是否应该使用我们放置在请求对象(即HttpServletRequest对象)中的属性在AOP通知中设置新日志对象的属性?
我对选项1的问题是,控制器会意识到日志记录,而且根据良好的设计原则,控制器只应该将任务委托给业务层和服务层来执行这些任务。选项1将意味着控制器所做的不仅仅是委托任务,即它将构建日志对象。
我对选项2的问题是,它将我的日志对象与请求对象(即HttpServletRequest对象)紧密地结合在一起,因此我想知道这种方法是否有任何潜力。
欢迎任何形式的建议、建议和批评。此外,如果有人要处理类似的情况,我想知道他们是如何处理这个问题的。
先谢谢大家。
发布于 2012-10-10 00:52:33
我会使用方面将日志记录添加到服务层,将其表示为接口。
您可以使用HTTP过滤器或方面从控制器层进行日志记录。
您可以根据需要在多层中应用AOP。
https://stackoverflow.com/questions/12810444
复制相似问题