Spring boot 将服务传递给thymeleaf模板是一种不好的做法吗?

Spring boot 将服务传递给thymeleaf模板是一种不好的做法吗?,spring-boot,thymeleaf,Spring Boot,Thymeleaf,我有一个springboot应用程序,它依赖于一些非常复杂的逻辑来确定用户是否有权执行某些操作。但是,在呈现模板时,我必须根据这些权限决定是否显示某些UI元素,目前唯一的方法是将无数的mayUserDo…属性传递给视图模型 相反,将userpermissions服务传递给我的模型,并通过从该服务调用一个方法在模板中执行这些简单的检查会容易得多,从而避免了大量冗余变量四处浮动的混乱局面 所以我的问题是:这是一个可以接受的解决方案吗?如果不是,为什么不呢? < P>我认为从你的胸腺模板调用服务是一个

我有一个springboot应用程序,它依赖于一些非常复杂的逻辑来确定用户是否有权执行某些操作。但是,在呈现模板时,我必须根据这些权限决定是否显示某些UI元素,目前唯一的方法是将无数的
mayUserDo…
属性传递给视图模型

相反,将
userpermissions服务
传递给我的模型,并通过从该服务调用一个方法在模板中执行这些简单的检查会容易得多,从而避免了大量冗余变量四处浮动的混乱局面


所以我的问题是:这是一个可以接受的解决方案吗?如果不是,为什么不呢?

< P>我认为从你的胸腺模板调用服务是一个坏的做法。< /P> 模板的任务是显示数据。您在模板中加入的逻辑越多,您的模板就越难理解和维护

还要考虑测试:如果您的服务返回一个DTO,其中包含一个用例的所有字段,那么您可以轻松地立即测试该对象的完整性和正确性,而不是测试具有相同需求的每个方法,而不必考虑方法之间的关系


为了解决您的问题,您可以考虑将模板分解成更小的部分,并将它们连接在一起。例如,可以提取保持不变的标题。如果有一个“肯定”和一个“否定”案例决定了对多个字段的访问,那么这部分内容也可以提取到一个较小的模板中。

传递服务的问题之一是,Thymeleaf在编写模板时可能多次调用一个getter或setter来获取单个值。您肯定不希望Thymeleaf调用一个对模板多次执行SQL调用(或其他后端服务调用)的方法。我确实认为将服务传递给模板是一种不好的做法。