신규기능들에 대한 테스트를 할때,,,,
새로 기능을 추가하면서 기존에 있는 코드가 영향을 받을 수 있음!
엔터프라이즈급의,, 소프트웨어를 다룰때는 아키텍쳐가 달라짐 - 좋은회사 = 좋은,, 시스템
앨범을 가져오는 코드 - Album_GetByPKTest()
1. 단위테스트
-> 함수를 사용할 코드를 먼저 만들고 함수를 만들기~! - 테스트 주도 개발 방법론
// Attribute
// Reflection
void start() { } 같은 C#에서 쓰이는 코드가 protectecd virtual ~~ 이런식으로 써있고 추상클래스안에 없는이유가 reflection을 통해서 안에서 자동으로 구성 되어있기 때문
2. Album_GetByPK() 만들기
컨트롤+. 만들고 > F12(정의부로이동)
Reader -> 판독기
SqlParameter, SqlDataReader 두개가 필요함!
reader.Read() --> 반환값은 bool형 (읽으면 1 / 못읽으면 0)
.Net 프레임 워크에는 Int32 -> int 있음 (근데 c#에는 없음)
int16 -> short / int64 -> long
GetInt32 -> 4바이트 정수를 얻어와라
-> 몇번째 컬럼에 있는 값을 얻어오는지? reader.GetInt32(@@)
c#같은경우 가비지컬렉터가 있지만 외부랑 연결되어있을때는 무조건 연결/닫기를 해주어야함!!! 안하면 메모리가 쌓이고 어느순간 뻗음!! -> 이런종류의 버그는 찾기가 힘듦,,,
3. Album_GetAllPK() 만들기
3-1. 단위테스트
4. Album_InsertTest() -삽입
* 변수는 그대로 사용하고 새로운 객체를 만들어서 쓰는 법두 있음 - 이게 좀더 나음!
// 이때 AlbumId가 자동증가 설정이 안되있었기때문에 우리는 AlbumId도 @로 넘겨주었어야함.
-> 그렇기 때문에 id사양 예로 바꿔주기!!
5. 업데이트 - Album.Update()
5-1. 단위테스트코드
5-2. 쿼리문
6. 삭제
- 둘중 하나 쓰면 됨
- 실제함수
* 근데 여기서 이런식으로 테스트코드를 짜게되면 이미 삭제된 상테에서 테스트할때 NULL이 들어오게되면 NULL references 오류가 나기때문에 좀 다른식으로 로직을 짜보도록 하겠음!
* 마지막 앨범을 가져오는 쿼리를 추가해봅시다,,, -> ???
- 바뀐 단위테스트 코드
EWIG - WINFORM 버전 만들어보기
1. 보기 > 도구상자 > (모든 윈폼 컨트롤 버튼)
* 버튼을 두번 클릭하면 >> 이벤트가 생기게됨 (스크립트!!)
* 윈폼 실행 > ctrl + F5
>> 윈폼으로 우리가 만들었던 코드를 실행시키려면 여태까지 콘솔프로젝트에서 작성했떤 코드를 그대로 써주어야함 이것은 매우 비효율 적인 일임! 그래서 콘솔 프로젝트, 윈폼프로젝트 둘다 쓸 수 있는 재활용이 가능한 코드만 모여있는 프로젝트를 하나더 만들어주어야함! -> 콘솔에 있는 코드들을 몽땅 다 뽑아내야함!!
--> 별개의 프로젝트 : 유아이가 없는/코드만있는 --> 라이브러리
솔루션 > 새 프로젝트 추가 > 라이브러리 > .NET Framework
> 기본으로 생긴 class1.cs 삭제하셈 > 삭제하구 Album.cs 스크립트를 옮겨서 붙여넣기함!
> AlbumData.cs 클래스 만듦 > 만들었던 코드들 다 붙여넣기하고 > using space 해줌!!! > static 다 빼줌 > 함수앞에붙였던 Album이라는 접두어도 다 빼줘도 됨!!!
>> 콘솔 프로젝트에 있는 main을 손봐봅시다
- AlbumData.cs로 옮겨진 코드들 때문에 빨간줄이 뜨는데 이때 참조해주어야함 !!!!
- AlbumDate albumData = new AlbumData(); 를 추가해주고 using namespace 해줌!!
- 모든 함수를 .을 사용하여 객체지향적으로 만들기!
== 이로써 윈폼에서도 AlbumData 코드를 쓸 수가 있음!!!!
>> 윈폼 프로젝트로
- 참조
- 실행화면
03 메소드간 중복코드 제거
1. 커넥션 코드 함수 만들기
- open() 까지 추가로 해주었음!
2. 코드 읽어오는 함수
- 이친구를
- 이렇게
- 구체적인 함수 -> 이제 이 함수로 계속해서 쓰면 됨!
==> 사실 여태까지도 legacy 기술임...... --> 이제 ORM이라는 프로세스에 인해서 바뀌고 있음,, 하지만 실무에서는 아직도 안바뀌고있음.. ㄷㄷㄷㄷ 그런회사가 있기때문에 아직은 알아두어야함.1..111..1
==> 단위 테스트 코드 단도 바꿔줘야함 이름이 바뀐게 많아서,,,, 다시 고쳐줘야 테스트를 할 수 있음!1
그런데 이때, 계속 AlbumData 객체를 단위함수마다 선언해주어야하는데 사실 지금 단위테스트단은 state less라고 해서 상태가 없는 함수들임. 그렇기때문에 객체를 하나만 생성해도 무방함 -> 데이터 리포지토리 라는것을 만들면 좋음!
- 멤버로 AlbumData를 넣어줌!
* 생성자중 static이 붙은 생성자가 있는데 말 그대로 static 생성자를 초기화 해주는 생성자임!
- 프로퍼티를 만들어보자
==> 그결과 이제는 이렇게 써주면 됨1!! - 윈폼에서도 사용 가능 - 메인쪽에서도 사용 가능!
* 다 바꿔줘도 객체를 선언할 수 있음 사실 이거는 안됨
--> AlbumData 클래스안에 public 으로 생성자가 생략되어있기 때문이었음 그렇기때문에 이걸 internal로 바꾸어주면 위와같은 상황을 막을 수 있음! (main은 콘솔프로젝트 안에있고 AlbumData는 클래스 라이브러리 프로젝트 안에있기때문에 internal로서 프로젝트간의 사용을 막을 수 있고 같은 프로젝트는 사용할 수 있게끔 할 수 있음!)
** internal이 왜 필요한가? - 두개의 프로젝트를 써보았을때 비로소 알 수 있음!
- 비로소 막아짐(에러가뜸)
* 여기서 잠깐 거슬리는게 있는데 라이브러리 프로젝트안에 namespace가 그냥 복붙했기때문에 제대로 네이밍이 안되어있는데 이거를 제대로 고쳐주고 넘어가자!
- 엘범위에 커서를 놓으면 밑에처럼 창이생기는데 이걸하면 모든 Album의 네임 스페이스가 Ewig.Data로 바뀜!
테이블을 옮겨놓은 클래스? - 엔티티
엔티티 프레임워크
1. Album.cs 클래스를 삭제하고 새로 추가
2. 서버연결 - 없으면 다시 만들기
- 데이터 베이스를 다 추가하는데 sysdiagram은 체크해제해주기!!!! (지원개체??로 된거라!)
+) 생성된 개체이름을 복수화 또는 단수화에 꼭 체크!!!!
- 결과화면
- 템플릿을 생성하는 클래스
- Album.cs를 보면 다 구현되어있는것을 알 수있음
- 아까 복수형으로 선택했기때문에 _s가 붙은 것을 볼 수 있음
** 예기치 않은 수정을 하면 안됨 ㅠ 바뀌는게 아니라 덮어씌워지기때문에 파일이 싹다 새로 생겨버림!!!!!!
만약, Album에 Age라는 새로운 변수를 생성시키고 싶다면 partial라는 새로운 클래스를 생성시키면 됨!
1) 엔티티라는 새로운 폴더를 생성하고 그안에 클래스를 생성함
2) partial이라고 지정해주면 그 둘은 이어져있지만 새로운 변수를 생성하고 구현할 수 있는 클래스를 만들 수 있음
3) data 폴더 만들기 > AlbumData.cs 스크립트 옮겨넣기
**** using문이 끝나면 dispose가 자동실행되는 구문!!! ****
람다식을 사용해서 ArtistId<5 라는 코드를 구현하였고 이는 C#에서 알아서 쿼리문을 만들어줌!!!!!!!!!!!!!!
> GetByPK()
이 조건을 만족하는 것중 첫번째꺼를 가져와라
- First만 있는걸 사용하면 예외가 발생하지만 orDefault는 기본값인 NULL이 반환됨!!
-> null이 반환이 싫을때 first를 써서 예외처리를 해주면 됨!
> GetAll()
> GetLastAlbumId()
- 주석친 부분처럼하던지 var query 뒤에 진짜 SQL문식으로 적고 리턴시키는 방법이 있음!
> GetInsert()
> GetUpdate()
> GetDelete()
- using머시기 해야댐 ㅠ
* App.Config라는 파일이 있는데 (환경설정파일임) 다른 프로젝트에서도 쓰고싶음! 그러려면
솔루션 > NuGet 패키지 관리 > 설정후 > 설치 > 확인 > 동의함
> 새로 생긴 config안에는 아래와 같은 코드가 없으므로 다 붙여넣기하셈
> 쭉 실행해보면 GetPK에서 삑사리나는데 이거는 347로 우리가 정해진 값을 넣었기때문에 당연히 틀림!
그렇기 때문에, 코드를 조금 고쳐줌!
-> 이런식으로!
F10
'Archive' 카테고리의 다른 글
0927 ORM 기술을 사용한 EWIG 03 (0) | 2019.09.27 |
---|---|
0927 using문과 IDisposable 오류 (0) | 2019.09.27 |
0926 C#과 DB 연동 프로그래밍 : EWIG 01 (0) | 2019.09.26 |
0925 서버프로그래밍 MSSQL_SERVER DB (0) | 2019.09.25 |
0924 서버프로그래밍 (0) | 2019.09.24 |