ডিডিডি সংগ্রহস্থলের একটি সাধারণ প্রয়োগ খুব বেশি ওও দেখায় না, উদাহরণস্বরূপ একটি 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
কমপক্ষে গ্রাহকদের সাথে একটি রক্তাল্পতা মডেল হওয়ার প্রত্যাশা করে ।
অন্যদিকে, ওওপি বলেছে যে কোনও জিনিসের 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"));
}
}
এটি অর্জনের জন্য সর্বোত্তম পদ্ধতির কী? কোনও অবজেক্ট-ভিত্তিক সংগ্রহস্থল কার্যকর করা কি সম্ভব?