1

배경, 사용자 지정 클래스와 추가 테이블로 ASP.NET 멤버를 확장하려고합니다.팩토리 패턴과 사용 용이성?

ASP.NET MembershipUser에는 보호 된 생성자와 데이터베이스에서 데이터를 읽는 public 메서드가 있습니다. 맞춤 테이블과 관련 클래스로 데이터베이스 구조를 확장했습니다.

원본 API에서와 같이 정적 메서드를 사용하여 새 멤버를 만드는 대신 간단한 개체를 인스턴스화하고 여러 엔터티가 있으므로 데이터를 채울 수 있습니다.

원래 패턴 # 1 protected 생성자

> static CreateUser(string mydata, string, mydata, ...) 
> User.Data = mydata; 
> User.Update() 

내 기본 설정 패턴 # 2 공공 생성자

> newUser = new MembershipUser(); 
> newUser.data = ... 
> newUser.ComplextObject.Data = ... 
> newUser.Insert() 
> newUser.Load(string key) 

나는 패턴 # 2는 사용하기 쉽고 자연으로 찾을 수 있습니다. 그러나 방법 1은 원자력이 많고 적절한 데이터를 포함하도록 보장됩니다.

찬성/반대 의견을 듣고 싶습니다. 내 마음에 문제는 내가 간단한 CRUD/개체를 선호하지만 기본 API를 활용하려고합니다. 이러한 메소드는 완전히 일치하지 않습니다. 예를 들어 API에는 UnlockUser() 및 IsLockedOut에 대한 읽기 전용 속성과 같은 메서드가 있습니다.

몇 가지 가능성이 있습니다.

옵션 # 1 개체를 저장 /로드하지만 개인 생성자가 필요합니다.

옵션 # 2 개체가 저장/자체를로드하지만이 public 생성자

에게 옵션 # 3 하나를 보자 가지고하는 것은 POCO/간단한 CRUD 개체를 만드는 것입니다 다음 데이터베이스를 업데이트하는 정적 메서드가 있습니다. ..............

옵션 # 1 장점 : 안전 "원자", 객체의 무결성 Detriments 멀티 스레딩 ->에게 많은 데이터를 전달하는 것은, 아마도이 필요한 어려운 사용하기 업데이트가 더러워 보인다, 그래서 어떤 경우에는 트랜잭션에 포장을 필요로하는 만든 후

옵션 # 2 장점 : 사용하기 쉬운, 트랜잭션을 구성하는 쉬운 방법 단점 : 개체 또는 적절하게 설정되지 않을 수

+1

전체 구성원 자격이 정말로 융통성이없고 성가신 것으로 나타났습니다. 결국에는 ASP.NET에서 해킹하려고 시도했던 것보다 처음부터 내 자신을 직접 작성하는 것이 더 빠릅니다. 예를 들어 우리 시스템 중 하나에서 사용자는 전자 메일 주소가 없지만 암호 재설정과 같은 작업을 수행하려면 전자 메일 주소를 입력해야합니다.그리고 나에게 그 물건에서보기 흉하지 않은 오류 메시지를 얻을 수 없다는 것을 시작하게하지 마라. –

답변

1

귀하의 옵션 # 2를 더 선호합니다. 나는 기본적으로 생성자가있는 객체를 선호한다. # 1을 좋아한다고 말하면 실제로 데이터를 입력해야하지만 실제로는 유효성 검사가 필요합니다. 따라서 유효성 검사가있는 경우 왜 유효성 검사에 의존하지 않는 것이 좋습니까? 당신이 그 (것)들을 가지고 있지 않으면, 그 (것)들을 안으로 두십시오! (틀림없이, 기본 생성자를 선호하는 주된 이유 중 하나는 직렬화를위한 것이므로 테스트하기가 더 쉽다.)

단지 $ 0.02 가치.