2008-11-07 5 views

답변

12

는 컴파일러조차보기 전에 물론, # 정의는 전처리에 의해 컴파일하지 - 그래서 토큰 '신탁'단지 '1'또는 '0'코드에서조차 없습니다. #define을 전역 변수로 변경하거나 올바른 값을 반환하는 함수를 사용하는 것이 좋습니다.

2

#if은 컴파일 타임입니다. 빌드 프로세스 (msbuild/csc 스위치를 통해)에서 지정할 수 있지만 실제로 런타임에는 지정할 수 없습니다. 제외 코드 은 존재하지 않습니다. 당신은 더 나은 (1)에 통보 될 수 있습니다

  • 는 의존성 삽입 (Dependency Injection)을 사용하여 각 백엔드에 대해 별도의 DAL 스택을 가지고/IOC의
  • 를 사용하여 코드를 기반으로 N
  • 지점 중 하나를 지원하는 ORM 도구를 공급자 (단일 DAL에서)
0

아니요, 전 처리기는 컴파일하기 전에 실행되며 런타임에 코드를 기반으로 동작을 전환하려는 경우 해당 시점의 코드를 변경할 수 있습니다. 조건부 논리.

-1

디자인이 잘못되었습니다. 틀렸어. 이것은 20 년 전에 받아 들여 졌을 지 모르지만, 여기에 필요한 것을하기위한 기술이 많이 있습니다.

실제 구현 (SQL 기반 또는 오라클 기반)에 의존하지 않는 인터페이스로 모든 데이터 액세스 로직을 분리 한 다음 DI/IoC를 사용하여 런타임에 원하는 구현을 주입해야합니다. 소리보다 훨씬 간단하고 매우 뛰어나며 코드를 쉽게 테스트 할 수 있으며 전체 재설치없이 응용 프로그램을 사용자 정의하고 업데이트 할 수 있습니다.

관련 질문 :
https://stackoverflow.com/questions/45191/ioc-explain-and-more-important-when-to-use-it
Inversion of Control with .net
https://stackoverflow.com/questions/71041/which-single-iocdi-container-would-you-recommend-using-and-why

+0

물론, 더 나은 솔루션이 존재한다. 어쩌면 내가 그걸 묻는거야. 그리고 저는 이것이 이것이 "가정"이라고 지적했습니다. 그 방법으로도 솔루션을 사용하지 않을 것입니다. 이 예제는 방법이 있는지를 배우는 예제 일뿐입니다! –

+0

공격적입니까? 쳇. – Will

관련 문제