- 대형 솔루션, 프로그램 개발 사용하는 프로젝트 구성 방식(큰 틀을 구성)
- 다양한 플랫폼을 지원하는 재사용성이 높은 코드를 작성하는 방식
- Enterprise Architecture 대로 구성이 안되면 웹은 웹대로 따로 써야한다.
자주 조회가 되는 정보라면 메모리에 저장
1 .net Framework
2 .net core
3 .net Framework(portable) - Xamarin
4 .net Standard
하는 일은 같은데 직접 접근을 할 수 없고 참조를 추가해 줘야 한다.
클라이언트 버튼 → ASP.NET MVC 리스트 출력 호출 → BLL → IDAL → DAL
- DB를 Oracle로 바꾼다고 치면 DAL만 교체 해주면 된다.
- Note라는 솔루션에 PresentationLayer 이외의 Layer들은 클래스 라이브러리로 작성이 되고 고객의 변덕으로 인해서 코드의 유연성이 필요할 경우 같은 소스코드로 웹뿐만 아니라 Winform, WPF, Xamarin 등 다양한 플랫폼을 지원할 수 있다는 매우 큰 장점이 있다.
의존성주입
- 프로그래밍에서 구성요소가 의존관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴
마틴 파울러는 세가지 의존성 주입 패턴을 제시
- 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입
- Setter를 통한 주입 : 의존성을 입력받는 Setter 메소드를 만들고 이를 통해 의존성 주입 (WPF쪽에서 많이 사용)
- Interface를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입
- 프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름제어를 받게되는 소프트웨어 디자인 패턴을 말한다.
직접 UserDal클래스에 의존
추후 코드 변경사항이 생길때 참조되어 있는 모든 부분을 찾아 수정해야하는 단점이 있다.
인터페이스를 생성 후 생성자에 의존성 주입을 해주면 객체를 직접 참조하는 강한결합을 해제하고 느슨한 결합을 시킬 수 있다.
services.AddTransient<UserBll>();
/* 인터페이스와 구현체 매칭시켜줌 */
services.AddTransient<IUserDal, UserDal>();
Startup.cs에서 참조만 바꿔주면
BLL은 고치지 않아도 인터페이스를 사용하면 MSSQL에서 Oracle로 변경된다. 항상 일관된 기능 등을 정의할 수 있다.
클라이언트의 접속상태와 상관없이 웹 서비스 시작 때 생성되고 종료될때까지 유지된다. 모든 호출에서 같은 오브젝트를 재사용한다. 따라서 결과값을 전체 모든 호출하는 사람들과 공유하는 효과를 얻고 보통 누적된 방문자 수를 보여줄 때 사용한다.
각 HTTP 요청 당 하나의 인스턴스를 생성하며, 클라이언트의 Request 시작부터, Response 종료까지 유지된다. 같은 주소의 웹 화면에서 여러번 이를 사용할 경우 같은 인스턴스를 재사용 한다.
매 사용때 마다 새로운 객체를 생성한다. 비유지(stateless) 서비스에 가장 적합