- Mastering Microservices with Java
- Sourabh Sharma
- 331字
- 2021-07-02 13:03:39
Repository implementation
Now we can implement the repository pattern, as learned about in this chapter. To start with, you will first create the two interfaces, Repository and ReadOnlyRepository. The ReadOnlyRepository interface will be used to provide an abstraction for read-only operations, whereas the Repository abstraction will be used to perform all types of operations:
public interface ReadOnlyRepository<TE, T> { boolean contains(T id); TE get(T id); Collection<TE> getAll(); }
The following diagram contains the OTRS domain repositories:

Based on the defined interface, we could create the abstraction of the Repository, which would execute additional operations such as adding, removing, and updating:
public interface Repository<TE, T> extends ReadOnlyRepository<TE, T> { void add(TE entity); void remove(T id); void update(TE entity); }
The Repository abstraction, as defined previously, could be implemented, in a way that suits you, to persist your objects. The change in persistence code, which is a part of the infrastructure layer, won't impact on your domain layer code, as the contract and abstraction are defined by the domain layer. The domain layer uses abstraction classes and interfaces that remove the use of the direct concrete class, and provides loose coupling. For demonstration purposes, we could simply use the map that remains in the memory to persist the objects:
public interface RestaurantRepository<Restaurant, String> extends Repository<Restaurant, String> { boolean containsName(String name); } public class InMemRestaurantRepository implements RestaurantRepository<Restaurant, String> { private Map<String, Restaurant> entities; public InMemRestaurantRepository() { entities = new HashMap(); } @Override public boolean containsName(String name) { return entities.containsKey(name); } @Override public void add(Restaurant entity) { entities.put(entity.getName(), entity); } @Override public void remove(String id) { if (entities.containsKey(id)) { entities.remove(id); } } @Override public void update(Restaurant entity) { if (entities.containsKey(entity.getName())) { entities.put(entity.getName(), entity); } } @Override public boolean contains(String id) { throw new UnsupportedOperationException("Not supported yet.");
//To change body of generated methods, choose Tools | Templates. } @Override public Entity get(String id) { throw new UnsupportedOperationException("Not supported yet.");
//To change body of generated methods, choose Tools | Templates. } @Override public Collection<Restaurant> getAll() { return entities.values(); } }
- 現代C++編程:從入門到實踐
- Modular Programming with Python
- SpringMVC+MyBatis快速開發與項目實戰
- Mastering OpenCV Android Application Programming
- Xcode 7 Essentials(Second Edition)
- Hands-On GPU:Accelerated Computer Vision with OpenCV and CUDA
- Oracle JDeveloper 11gR2 Cookbook
- Python語言實用教程
- Android驅動開發權威指南
- SQL Server 2016 從入門到實戰(視頻教學版)
- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)
- 監控的藝術:云原生時代的監控框架
- Neo4j 3.x入門經典
- 優化驅動的設計方法
- 信息學奧林匹克競賽初賽精講精練