비즈니스 로직 및 데이터 호출이 별도의 어셈블리로 포함되어있는 asp.net 웹 솔루션을 상속 받았습니다. 비즈니스 계층에는 HttpContext 세션 값을 가져 오거나 설정할 수있는 호출 수가 적습니다. 웹 로직이 아닌 프로젝트에서이 어셈블리를 재사용 할 수 있기를 원하는 비즈니스 로직에서 이것을 추상화 할 수있는 예제를 살펴 보았습니다. 아무리 나에게 최선의 방법을 보여줄 수 있습니까? 이 작업을 수행. 사용 시나리오에 따라 일종의 지속적인 저장소에서 값을 얻을 수있는 일종의 세션 팩토리를 생각하고 있었지만 아키텍처에 익숙하지 않고 포인터 나 두 가지 점을 고맙게 생각합니다.비즈니스 로직에서 ASP.net 세션 호출을 제거합니다.
답변
비즈니스 계층에 세션이있는 비즈니스는 무엇입니까? 그 진술을 좀 더 이해하려면 다음과 같이 생각하십시오. 비즈니스 계층이 사용자 관련 정보를 계속 유지해야하는 이유는 무엇입니까?
비즈니스 계층은와 작업과 과정 사용자 관련 데이터를 필요로하지만 상점은을. 이는 현재 저장되어있는 데이터를 주입해야 함을 의미합니다. 즉, 필요한 데이터를 매개 변수로 전달해야합니다. 이 방법으로 건축 계약을 맺는 것은 매우 명확한 방법으로 "이봐, 내 일을하는 데 필요한 사용자 정보"가 필요하다는 것을 의미한다. 이전에 저장된 무작위 값으로 무언가를 수행하지는 않을 것이다. 비즈니스 계층에서는 해당 데이터를 사용하여 사용자를 인증 또는 승인하는 것이 좋지만 인증 결과가 끝나면 폐기해야합니다. 값이 데이터베이스에 하나 또는 두 개의 호출을 저장하도록 지속되는 경우 데이터베이스 호출의 효율성에 문제가 있습니다. 데이터베이스 호출은 그와 같은 간단한 작업을 신속하게 호출하기 때문에 발생합니다.
내 제안은 비즈니스 계층에서 Session에 대한 참조를 제거하고 전달해야하는 사용자 데이터를 포함하도록 기능 서명을 변경하는 것입니다.
리플렉션에서 올바른지, 그 레이어에 값을 저장하고 싶지는 않습니다. 단순히 세션에서 현재 지속되는 데이터를 레이어에서 사용할 수있게하려는 것입니다. 이 예에서는 Session에 저장된 Guid 목록이 데이터베이스에 직접 반영되므로 필요한 경우 여기에서 검색 할 수 있습니다. 내가 정말로 원했던 것은이 데이터에 대한 요청을 제 3 자 (세션 팩토리)에게 넘기는 것이고 이것이 가장 적합한 장소에서 목록을 반환한다는 것이 었습니다. UI와 데이터베이스에서 호출되는 Session입니다. 그렇지 않다면. –
굉장한 ... 나는 득표 한 곳에서 투표를 거부 한 것이 아니라, 투표 한 사람으로부터 나의 실수로 교육받는 것을 좋아할 것이다.나는 2 포인트를 놓치지 않는다. 그것은 단지 원칙의 문제 일 뿐이다. – slugster
내 생각에 가장 간단한 방법은 Dictionary<string, object> {get; }
인 ISessionProvider
인터페이스를 만드는 것입니다. 실제 세션 백 내용을 반환하는 public class HttpSessionProvider : ISessionProvider
을 만듭니다.
최소한이 객체를 웹 응용 프로그램에서 인스턴스화하고 수동으로 지정하거나 IOC 패턴을 사용하여 백엔드 클래스에 지정합니다.
[편집] 작은 반사 후 [편집] 깨끗한 방법이 아닙니다. asp.net 프레임 워크에 대한 종속성은 없지만 여전히 세션의 "asp.net"내용에 액세스 할 수 있습니다. 이 경우 , 인터페이스를 유지하지만, 하나는 특정 속성 (문자열 고객 INT의 사용자 ID 등)을 추가하거나 나만 일부 프로젝트에이 같은 짓을
실제 비즈니스 데이터와 함께 사전을 반환 :
public interface IAppContext {
string SomeVariable {
set;
get;
}
}
public class HttpContextAppContext : IAppContext {
public static readonly string CONTEXT_PREFIX = "appcontext_";
public string SomeVariable {
set { HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"] = value; }
get { return (string)HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"]; }
}
}
- 1. Rails3의 비즈니스 로직에서 현재 사용자를 보호하는 방법
- 2. Java EE : Bean을 사용하여 비즈니스 로직에서 프리젠 테이션 로직을 분리
- 3. 웹 사이트의 비즈니스 계층이 세션 상태에 액세스해야합니까?
- 4. ASP.Net 웹 양식에서 세션 객체를 조롱하거나 가짜로 만드는 방법은 무엇입니까?
- 5. 비즈니스 로직에서 AOP 스타일 MVC와 비슷한 권한 부여를 사용하는 가장 좋은 무료 방법
- 6. WCF 세션 - ASP.Net 세션
- 7. ASP.NET 세션
- 8. ASP.NET 세션
- 9. ASP.NET 세션
- 10. ASP.NET 세션
- 11. ASP.NET MVC 세션 만료
- 12. WCF 웹 서비스에서 비즈니스 로직과 데이터베이스 호출을 분리하는 방법은 무엇입니까?
- 13. GWT 로직에서 HTML/CSS 레이아웃을 완전히 분리 할 수 있습니까?
- 14. ASP.NET 세션 상태 서버와 InProc 세션
- 15. asp.net - 세션 - 여러 브라우저 탭 - 다른 세션?
- 16. 다른 ASP.NET 세션 재사용 (세션 ID 설정)
- 17. ASP 세션 변수와 ASP.NET 세션 변수
- 18. ASP.Net 세션 상태는
- 19. ASP.NET 세션 문제
- 20. ASP.NET MVC 세션 사용
- 21. asp.net/c#의 세션
- 22. asp.net/c#의 세션
- 23. ASP.NET 세션 크기 제한
- 24. ASP.Net MVC Nhibernate 세션
- 25. ASP.NET 세션 혼합
- 26. ASP.NET 세션 상태 모니터링
- 27. ASP.NET - 세션 시간 초과
- 28. asp.net 세션 관리
- 29. asp.net 세션 시간 초과
- 30. Session_End의 asp.net 세션 변수
어떤 종류의 값이 세션 상태에 저장됩니까? –
지금은 Guid 목록으로 사용자 세부 정보와 데이터 권한을 포함하는 복잡한 유형입니다. –