문제

나는 건설 작은 웹사이트에 대한 재미/학습을 사용하여 상당히 표준 Web/서비스/데이터 액세스는 계층화된 디자인입니다.

을 저장하는 나에게서 끊임없이 인스턴스를 만들의 서비스 층/데이터 액세스를 레이어 클래스를 만들었습니다 방법들을 통해 그들에 고정되어 있습니다.말 얻을 동시성 문제로 그들이 사용하는 지역 변수 등과 공유하지 않는 모든 리소스(일들은 간단한을 위해 충분히 이 순간에).

로 볼 수 있는 무역에 대해 이는 내가 정말 다음과 같은 진정한 OO 접근 방식이지만,그런 다음 다시 그것을 유지하 코드는 많은 깨끗합니다.

어떤 이유가 있습이 가능한 방법이 될?어떤 종류의 문제가 발생할 수 있 나중에?나을 것이가"공장"등을 반환 할 수 있습니 나에게 서비스의 인스턴스와 데이터 레이어 수업으로 필요합니까?

도움이 되었습니까?

해결책 3

단점 :

  • 테스트 할 모의 데이터 액세스/비즈니스 로직 객체를 작성할 수 없으므로 단위 테스트를 작성할 수 없습니다.
  • 다른 스레드가 정적 코드에 동시에 액세스하려고 시도하거나 동기화 된 정적 메소드를 사용하면 정적 메소드를 사용하기 위해 스레드가 큐를 타게됩니다.
  • 인스턴스 변수를 사용할 수 없으므로 코드가 더 복잡해지면 제한이됩니다.
  • 필요한 경우 비즈니스 또는 데이터 액세스 계층의 요소를 대체하는 것이 더 어려울 것입니다.
  • 이러한 방식으로 응용 프로그램을 작성하려는 경우 PHP와 같이 이러한 방식으로 작동하도록 설계된 언어를 사용하는 것이 좋습니다.

비 정적 비즈니스/데이터 액세스 계층 클래스를 사용하는 것이 좋습니다.

  • 싱글 톤 패턴 사용 (각 클래스의 단일 인스턴스 생성 및 스레드간에 공유) ...
  • 또는 각 스레드에서 클래스의 인스턴스를 필요로하는시기와시기에 생성합니다.

응용 프로그램에 연결된 각 사용자/세션은 자체 스레드에서 실행되므로 웹 애플리케이션은 본질적으로 멀티 스레드입니다.

다른 팁

당신은 그들이 "항상 손과 발을 타고 내 안에 손과 발을 유지하십시오"라고 말하는 놀이 공원에서 그 놀이기구를 알고 있습니까? 당신이하지 않으면 타는 것이 훨씬 더 재미 있다는 것이 밝혀졌습니다. 유일한 진정한 트레이드 오프는 당신이 실제로 진정한 손을 잡고-피트 인 사이드-타임 타임 접근 방식을 따르지 않는다는 것입니다.

요점은 이것입니다. "진정한 OO 접근법"을 따라야하는 이유가 있습니다. 손과 발을 타는 데 손을 내밀어야 할 이유가있는 것처럼, 어디서나 피가 나기 시작할 때까지 큰 재미입니다.

당신이 그것을 묘사하는 방식, 이것은 "잘못된"접근 방식이 아니지만 피하려는 문제를 실제로 보지 못합니다. 서버가 시작될 때 이러한 비즈니스 객체의 단일 인스턴스를 만들고 필요에 따라 서블릿으로 전달할 수 없습니까?

oo를 창 밖으로 버릴 준비가되면 싱글 톤 패턴도 확인하고 싶을 수도 있습니다.

나는 당신의 디자인에 대한 장점을 실제로 보지 못하고 잘못 될 수있는 많은 것들이 있습니다. 코드 줄을 저장하고 있습니까? 다음은 귀하의 접근 방식에 대한 몇 가지 단점입니다.

  • 비즈니스 로직 구현을 쉽게 대체 할 수 없습니다
  • 인스턴스 변수를 여러 가지 방법으로 나누는 것을 용이하게하기 위해 정의 할 수 없습니다.
  • 다중 스레드 문제가 발생하지 않을 것이라는 귀하의 가정은 거의 확실히 잘못되었습니다.
  • 테스트를 위해 쉽게 조롱 할 수 없습니다

나는 한 줄의 코드를 누락하면 무엇이든 구매하는 것을 정말로 보지 못합니다.

그것은 실제로 "OO 디자인"문제가 아니라 더 많은 적절성입니다. 왜 그런 절차상의 방식으로 Java를 사용하고 있습니까? 분명히 PHP는 이러한 종류의 디자인에 더 적합합니다 (실제로 컴파일 및 배포 할 필요가 없어서 시간을 절약 할 수 있습니다).

나는 단지 당신의 비즈니스 계층을 비 정적으로 만들 것입니다. 응용 프로그램을 유지, 변경 및 발전시키기가 훨씬 쉽게 만들 수 있습니다.

이 유형의 아키텍처로 객체를 단위 테스트하는 데 어려움이있을 수 있습니다. 예를 들어, 정적 데이터 액세스 계층을 참조하는 비즈니스 객체 계층이있는 경우 Mock Data Access 객체를 쉽게 사용할 수 없기 때문에 비즈니스 계층을 테스트하기가 어려울 수 있습니다. 즉, 비즈니스 계층을 테스트 할 때 데이터 액세스 계층에서 "실제"메소드를 사용하고 싶지 않을 것입니다. 데이터 액세스 계층이 정적이 아닌 경우 테스트 목적으로 비즈니스 계층에 모의 데이터 액세스 개체를 제공 할 수 있습니다.

내가 생각하는 당신 동시성 문제와 모든 정적 방법으로 여러 사용자.웹 층이 스레드 동시 사용자 수가 있습니다.할 수 있는 귀하의 모든 정적 방법을 이?어쩌면,하지만 하지 않습니다 그들이 지속적으로 잠에서 큐에서 요청은 단일 파일입니까?나는 확실하지 않은 결코 당신의 아이디어.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top