How to alter the design so that entities don't use injections?

后端 未结 4 1511
没有蜡笔的小新
没有蜡笔的小新 2021-01-18 00:19

I\'ve read and came to realize myself that entities (data objects - for JPA or serialization) with injections in them is a bad idea. Here is my current design (all appropria

4条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-18 00:38

    If you could alter your flow than perhaps you could do something like this:

    class Car1InnerService {
    
        @Inject
        Car1Manager manager;
    
        void operate(int i, Car1 car) { 
         if (i < 0)
            return manager.operate(car.getData());
         else if (i > 1)
            return manager.operate(car.getData(), i);
         }
       }
    }
    

    I introduced some inner service which will operate on Car1 and use Car1Manager for it. Your AbstractCar class will also of course lose it's operate method because from now on your service will handle it. So now instead of calling car1.operate(i) you will have to make a call via Service like this:

    public class SampleCar1ServiceUsage{
        @Inject
        Car1InnerService car1InnerService;
    
        public void carManipulator(List carlist){
            int i = 0; //I don't know why you need this param therefore i just increment it 
            for(Car1 car: carlist){
               car1InnerService.operate(i, car);
               i++;
            }
        }   
    }
    

    Of course you should introduce similar functionality for every other AbsractCar children (perhaps even extract some abstraction if necessary like for example AbsractCarInnerService which would define operate method or some interface which would do the same if you don't want any other solid methods in it). However this answer is still somehow related to @Justin Cooke answer and in my opinion you should definitely check those patterns which he mentioned in his post.

提交回复
热议问题