2017-12-25 1 views
1

깨끗한 아키텍처와 MVP가있는 안드로이드에서 데이터 모델링에 대한 인상적인 article을 읽었습니다.깨끗한 아키텍처 - 데이터 모델 매핑을 수행하는 올바른 방법은 무엇입니까?

이제 필자는 내 도메인에있는 기존 모델을 리팩토링하여 하나의 코드에 코드 (안드로이드 코드)가 포함되어 있지 않고 특정보기에서 작동하도록 간소화하고 싶습니다. 때때로 모델을 변경하여 RecyclerView에서 선택된 위치를 얻는 것과 같은보기에서 작동하도록 모델에 "selectedPosition"이라는 필드를 추가합니다. 모델을 변경해야하는 경우가 많으며 유지 보수하기가 쉽지 않은 순수 모델로 끝납니다.

특히 저는 3 가지 지불 시스템에 대한 3 가지 모델 데이터를 사용하고 있습니다. 3 모델의 모든 필드가 다르게 나타납니다. 그들은 필드의 이름이 다릅니다. 누군가가 나에게 3 모델 모두 공통 모델을 사용하는 데 사용 된 아키텍처의 예를 보여줄 수 있습니까?

답변

1

데이터 모델

내가 3 개 결제 시스템에 대한 세 모델 공통 기능을 가지고 있음을 확신합니다. 따라서이 기능을 사용하여 인터페이스에 배치 할 수 있습니다. 각 모델은이 인터페이스를 구현해야합니다. 귀하의 경우에는 데이터 모델을 표시해야합니다. 예를 들어

:

class Info { 
    int id; 
    String cardNumber; 
    ....... 
} 

interface ITransactionable { //or abstract class with the common func and prop 
    void addUserWithCard(String cardNumber, String name); 
    boolean makeTransaction(\*some params*\); 
    Info getPaymentUserInfo(); 
} 

class Model1/2/3 implements ITransactionable { 
    \*In each case methods doing different job but give you same result, 
     you can take info for your models from servers, clouds, db...*\ 
} 

도메인 모델

도메인 모델은 데이터 모델의 조작, 비즈니스 로직을 나타냅니다.

class DonationService { 
    ITransactionable paymentService; 
    DonationService(ITransactionable paymentService) { 
     this.paymentService = paymentService 
    } 
    Info makeDonation(int money) { 
     paymentService.addUserWithCard("4546546545454546", "Vasya"); 
     paymentService.makeTransaction(money); 
     return paymentService.getPaymentUserInfo(); 
    } 
    ........ 
} 

각 레이어는 다음 API에 부여해야합니다. 예를 들어

프레젠테이션

각 트랜잭션 데이터 recyclerView를 채울 수있다. 그리고 거래에 대한 세부 정보를 얻거나 새로운 거래를하는 것처럼보기에서 이벤트를 가져옵니다.

당신은 그것이 실현 될 수있는 방법을보고이를 확인할 수 있습니다 https://github.com/android10/Android-CleanArchitecture

+0

당신이 추천 GitHub의에 저장소 내가 필요 정확히이다. 감사. – j2emanue

관련 문제