मैं अपरिवर्तनीय User
इकाई है:एनीमिक डेटा मॉडल से कैसे बचें? क्या संस्थाओं को भंडारित किया जा सकता है?
public class User {
final LocalDate lastPasswordChangeDate;
// final id, name, email, etc.
}
मैं अगर उपयोगकर्ता का पासवर्ड आई.डी. परिवर्तित किया जाना चाहिए एक तरीका है कि जानकारी वापस आ जाएगी जोड़ने की जरूरत इसे passwordValidIntervalInDays
सिस्टम सेटिंग से अधिक के लिए बदला नहीं गया है।
वर्तमान दृष्टिकोण:
public class UserPasswordService {
private SettingsRepository settingsRepository;
@Inject
public UserPasswordService(SettingsRepository settingsRepository) {
this.settingsRepository = settingsRepository;
}
public boolean passwordMustBeChanged(User user) {
return user.lastPasswordChangeDate.plusDays(
settingsRepository.get().passwordValidIntervalInDays
).isBefore(LocalDate.now());
}
}
सवाल कैसे उपरोक्त कोड अधिक वस्तु उन्मुख बनाने के लिए और कमजोर डोमेन मॉडल antipattern से बचने के लिए है? यदि ऐसा है तो कैसे SettingsRepository
तक पहुँचने के लिए passwordMustBeChanged
विधि User
के लिए ले जाया जाना चाहिए, यह User
के निर्माता में इंजेक्ट किया जाना चाहिए, या एक Settings
उदाहरण ctor प्रदान की जानी चाहिए, या passwordMustBeChanged
विधि एक Settings
उदाहरण से किया जा सकेगा प्रदान किया जाना?
Settings
और SettingsRepository
का कोड महत्वपूर्ण नहीं है, लेकिन completness के लिए, यहाँ यह है:
public class Settings {
int passwordValidIntervalInDays;
public Settings(int passwordValidIntervalInDays) {
this.passwordValidIntervalInDays = passwordValidIntervalInDays;
}
}
public class SettingsRepository {
public Settings get() {
// load the settings from the persistent storage
return new Settings(10);
}
}
मैं http://stackoverflow.com/questions/5694241/ddd-the-rule-that-entities-cant-access-repositories-directly पढ़ सकते हैं और http://stackoverflow.com है/प्रश्न/827670/is-it-ok-for-entities-to-access-repositories लेकिन उनमें से कोई भी मेरे प्रश्न का उत्तर देने लगता है –
[this] (https://blog.inf.ed.ac पर एक नज़र डालें। uk/sapm/2014/02/04/the-anemic-domain-model-is-no-anti-pattern-its-a-solid-design /) –