2009-04-17 5 views
0

본질적으로 어떤 비즈니스 로직과도 완전히 분리 된 데이터베이스 계층이 있습니다. 즉, 일부 비즈니스 데이터를 데이터베이스에 커밋 할 준비가 될 때마다 모든 비즈니스 속성을 데이터 메서드의 매개 변수로 전달해야합니다. 예를 들면 :SQL 매개 변수를 처리하는 가장 좋은 방법은 무엇입니까?

Public Function Commit(foo as object) as Boolean

이 잘 작동하지만 내가 커밋 및 매개 변수의 수십을 업데이트 들어갈 때, 그것은 많은 타이핑을 할 수있다. 두 가지 방법 (업데이트 및 생성)은 본질적으로 동일한 작업을 수행하므로 동일한 매개 변수를 사용합니다. 내가 궁금해하네요,이 매개 변수를 전달하기위한 최적의 솔루션은 무엇이 될까요 그래서 뭔가 변경 될 때마다 두 가지 방법으로 매개 변수를 변경할 필요가 없으며 내 입력을 줄일 수 있습니다. 몇 가지 생각했습니다. 가능한 해결책. 하나는 모든 sql 매개 변수를 데이터 클래스의 클래스 수준으로 이동 한 다음 비즈니스 계층에 설정된 일종의 배열에 저장하는 것입니다. 어떤 도움이 유용 할 것입니다!

+0

DAL에서 가지고있는 코드를 자세히 설명해 주시겠습니까? DAL 메서드에 개체를 전달하고 해당 개체의 속성에 매개 변수를 설정하고 있습니까? –

+0

Russ : 네, 그 일을하고 있지만, 지나가고있는 객체는 자체 CLR 유형이며 자체 속성이있는 클래스 객체는 아닙니다. – Austin

답변

0

답장을 보내 주셔서 감사합니다.하지만 제가하고있는 일에 대해 더 나은 방법을 찾은 것 같습니다. upsert를 사용하는 것과 비슷하지만, 주어진 기본 키를 찾는 Commit이라는 메서드가 있습니다. 레코드가 데이터베이스에서 발견되면 업데이트 명령을 실행합니다. 그렇지 않으면 삽입 명령을 수행합니다. 매개 변수가 동일하기 때문에 매개 변수를 변경하는 것에 대해 걱정할 필요가 없습니다.

0

기본적으로 List (Parameters)을 전달 하시겠습니까?

커밋 기능을 다시 실행하고 매개 변수 목록을 허용하지 않는 이유는 무엇입니까?

+0

나는 이것이 갈 길이라고 생각하지만 누군가 기다리는 사람이 있는지 알아 볼 것입니다. – Austin

0

SQL 2008 사용자는 병합을 사용하여 삽입/업데이트 저글링을 대체 할 수 있습니다. 때로는 upsert라고도합니다.

+0

감사합니다. 정말 멋진 기능입니다. 불행히도 2005 년 또는 2000 년까지 사용해야 할 수도 있습니다. – Austin

0

struct을 만들어 매개 변수 값을 저장할 수 있습니다.

0

나는 이터레이터 디자인 패턴이 최선의 해결책이라고 생각한다. 인터페이스 구현을 전달하면 ICommitableValues와 같이 키 쌍 열거 형 값을 전달할 수 있습니다. 키는 열 이름이고 값은 열 확약 가능 값입니다. 심지어 값이나 저장 프로 시저 등을 삽입 할 테이블 이름을 반환하는 속성도 있습니다.

입력 내용을 저장하려면 선언적 프로그래밍 구문 (특성)을 사용하여 커밋 가능 속성을 선언하고 미들웨어의 주 클래스를 선언 할 수 있습니다 리플렉션을 사용하여 이러한 커밋 가능 속성의 값을 추출하고 ICommitableEnumeration 구현을 준비 할 수 있습니다.

관련 문제