Page History
Info |
---|
개발과정중 지속적인 모델을 변경(데이터베이스에 적용)을 하고 서비스코드를 작성하면서 지속적인 로직 변경이 있을시 ORM은 유닛테스트와 결합하여 빠른 개발 사이클을 수행할수가 있습니다. 초기단계부터 유닛테스트를 적용하면서 API를 완성하는 시나리오 전략은 중요합니다. |
xUnit 테스트 추가
core 프로젝트의 솔류션에서 xUnit테스트를 추가하여 다음을 수행합니다.
...
Expand | ||
---|---|---|
| ||
솔류션에서 우클릭후 솔류션용 Nuget 관리로 접근을 하면, 기존 설치항목을 선택하여 다른 프로젝트에 동일하게 의존 라이브러리 설치가 가능합니다. |
테스트에 사용된 모델
최소길이의 제약조건은 DB에는 없으며, 어플리케이션 레벨에서 유효검사를하게됩니다. |
|
사용자를 외래키(FoeignKey)로 설정함으로(실제는 UserId가 지정됨) 토큰히스토리를 통해 토큰 소유자정보 접근이 가능합니다.
| ||||||||||||
위 스키마와 테이블은 C# Object정의로만 자동 생성되었습니다. 1 VS N관계를 위해 외래키설정도 되었으며 추가적으로 제약조건도 설정이 되었습니다. 엔티티의 테이블명과 필드명및 제약조건이 수없이 바뀌고 검증을 해야한다고 가정해봅시다. 대부분의 시간을 쿼리작성시간에 허비해야하며, 어플리케이션에 그것을 이용했을때 적합한 설계인지 판단하기까지 아주 오랜시간이 소요됩니다. |
개발 초기 프로타잎을 빠르게 만드는것이 1차목적이며 |
완성도에따라 이것은 바로 서비스화가 가능할수도 있습니다. ORM을 통해 빠르게 설계하고 빠르게 개선점을 찾는 ,초기 프로젝트의 개발 라이프 사이클을 단축 시키는것이 최종 목표입니다. |
서비스 구현하기
Code Block | ||||
---|---|---|---|---|
| ||||
public class AccountService { private readonly AccountContent _context; public AccountService(AccountContent context) { _context = context; } public User GetUserByid(int id) { return _context.Users.First(p => p.UserId == id); } public String GetAccessToken(string userid,string userpw) { User accessUser = _context.Users.First(p => p.MyId == userid && p.PassWord == userpw); if (accessUser == null) { throw new Exception("401"); } else { string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); _context.TokenHistories.Add(new TokenHistory() { User = accessUser, AuthToken = token, CreateTime = DateTime.Now, AccessTime = DateTime.Now }); _context.SaveChanges(); return token; } } public User GetMyInfo(string accessToken) { User myinfo= _context.TokenHistories.First(p => p.AuthToken == accessToken).User; if (myinfo == null) throw new Exception("401"); myinfo.PassWord = "******"; return myinfo; } } |
...
인증에 관련된 API를 서비스할수 있다란점이며..., SQL문 작성없이 DB 스토리지에 완벽하게 저장이되면서 작동이 됩니다.
서비스 TestCode 설계하기
- DBInit : 마지막 설계된 Entity가 DB에 모두 반영이되며 / 샘플데이터가 추가됩니다.
- AccountControlerTest : 테스트 DB와 연동되어 서비스로직을 실제 테스트합니다. ( 목업 DB를 활용한 패턴도 있음 )
...