DDD रिपॉजिटरी का एक विशिष्ट कार्यान्वयन बहुत OO नहीं दिखता है, उदाहरण के लिए एक save()
विधि:
package com.example.domain;
public class Product { /* public attributes for brevity */
public String name;
public Double price;
}
public interface ProductRepo {
void save(Product product);
}
इन्फ्रास्ट्रक्चर हिस्सा:
package com.example.infrastructure;
// imports...
public class JdbcProductRepo implements ProductRepo {
private JdbcTemplate = ...
public void save(Product product) {
JdbcTemplate.update("INSERT INTO product (name, price) VALUES (?, ?)",
product.name, product.price);
}
}
इस तरह के एक इंटरफ़ेस से Product
एनेमिक मॉडल होने की उम्मीद है , कम से कम गेटर्स के साथ।
दूसरी ओर, OOP का कहना है कि एक Product
वस्तु को पता होना चाहिए कि खुद को कैसे बचाया जाए।
package com.example.domain;
public class Product {
private String name;
private Double price;
void save() {
// save the product
// ???
}
}
बात यह है कि, जब Product
खुद को बचाना जानता है, तो इसका मतलब है कि इन्फ्रास्ट्रक्चर कोड डोमेन कोड से अलग नहीं है।
हो सकता है कि हम बचत को किसी अन्य वस्तु में सौंप सकें:
package com.example.domain;
public class Product {
private String name;
private Double price;
void save(Storage storage) {
storage
.with("name", this.name)
.with("price", this.price)
.save();
}
}
public interface Storage {
Storage with(String name, Object value);
void save();
}
इन्फ्रास्ट्रक्चर हिस्सा:
package com.example.infrastructure;
// imports...
public class JdbcProductRepo implements ProductRepo {
public void save(Product product) {
product.save(new JdbcStorage());
}
}
class JdbcStorage implements Storage {
private final JdbcTemplate = ...
private final Map<String, Object> attrs = new HashMap<>();
private final String tableName;
public JdbcStorage(String tableName) {
this.tableName = tableName;
}
public Storage with(String name, Object value) {
attrs.put(name, value);
}
public void save() {
JdbcTemplate.update("INSERT INTO " + tableName + " (name, price) VALUES (?, ?)",
attrs.get("name"), attrs.get("price"));
}
}
इसे प्राप्त करने के लिए सबसे अच्छा तरीका क्या है? क्या वस्तु-उन्मुख भंडार को लागू करना संभव है?