2012-02-03 5 views
0

등록 양식에서 매개 변수를 가져 오는 서블릿을 사용하고 있습니다. 현재 수행중인 것은 해당 매개 변수를 처리 할 Java 클래스를 사용하고 있습니다. 데이터베이스에 저장하지만이 클래스를 사용하는 방식이 잘못되었다고 생각합니다.클래스를 인스턴스화하고 작업을 수행하는 가장 좋은 방법은 무엇입니까

UserRegister ureg=new UserRegister(name,age,sex,country); 

그리고 그 모든 클래스에서 내 생성자 자체에 UserRegister 클래스의 메소드를 호출하여 DB에 저장하여 데이터를 처리에서 전체 일을 할 것입니다 : 내 코드는 다음과 같다.

올바른 접근 방법인가요? 아니면 더 나은 방법이 있습니까?

EDIT : 내 UserRegister 클래스는 데이터에 대한 처리 만 수행하고 데이터를 저장하는 비즈니스 계층을 호출합니다. 자체는 데이터베이스와 상호 작용하지 않습니다. 내가 묻는 것은 클래스를 만들었을 때 어떤 접근법을 따라야 하는지를 묻는 것입니다. 초기화 후에 클래스 내부에서 수행 할 고정 된 일련의 단계 만 있습니다.

+0

http://programmers.stackexchange.com에서 질문하는 것이 좋습니다. 여기 스택 오버플로에 IMHO는 "건설적이지 않은"것으로 간주됩니다. –

+0

@Brian : programmer.stackexchange.com에 대해 알려 줘서 고마워. 나는 그것에 대해 알지 못했다. – Abhi

답변

1

내 생성자는

잘못된 DB에 저장하여 데이터를 처리에서 전체 일을 할 것입니다. 이런 식으로 프로그램하지 마십시오.

클래스의 기본 필요성을 초기화 한 후 최대한 빨리 벗어나십시오.

UserRegister 개체가 생성되는 방법입니다. 이 메서드를 사용하여 ureg 개체의 메서드를 호출합니다.예를 들어

는 :

public void processRequest(name, age, sex, country) 
{ 
    UserRegister ureg=new UserRegister(name,age,sex,country); 
    ureg.updateSomeFields(); 
    ureg.doSomeBusinessLogic(); 
    ureg.prepareDBData(); 
    ureg.storeInDb(); 
} 

이 현재의 디자인을 개선하는 유일한 예이다. 그러나 유틸리티 클래스도 있어야합니다. 클래스 UserRegister은 사용자를 나타내는 데이터 및 동작을 사용자에게만 부여해야합니다.

디자인 유틸리티 클래스는 입력 형식을 취하고 계산을 한 다음 출력 데이터를 호출자에게 반환합니다. 그래서, whenevr processRequest 방법은 그 자체로 그것을하지 않고 수행 할 수있는 작업을 필요로하지만, 다른 방법을 호출 (이 같은 클래스 또는 다른 클래스에있을 수 있습니다)

편집 :

내가 당신이 클래스를 만들었을 때 어떤 클래스가있을 때 어떤 접근법을 따르는 지 묻는 중입니다. 초기화 후에 초기화 된 일련의 단계가 있습니다.

이 단계의 특성에 따라 다릅니다. 그들이 어떻게 관련되어 있는지 알아보십시오. 사용자와 관련이 있습니까? 그렇다면 User 클래스에 메서드로 저장하십시오. 그렇지 않다면, 관련 단계들을 함께 결합하고, 의미 성명을 가진 클래스를 생성하고 그것을 사용하십시오. 별도의 클래스를 만들 때 현재 용도뿐만 아니라 유틸리티로 사용할 수있는 방식으로 디자인하십시오.

+0

즉, UserRegister 객체를 만든 후에 내 서블릿의 메서드에서 UserRegister 클래스 내의 메서드를 호출해야한다. 좋습니다.하지만 UserRegister 클래스의 메서드를 항상 고정 된 순서로 호출해야한다면 UserRegister 클래스가 자체 메서드를 호출하도록하는 것이 더 좋지 않을까요? – Abhi

+0

프로그래밍 방식으로도 가능하지만 디자인에 대해서도 생각해보십시오. 그것은'UserRegister' 클래스에 의해 수행되는 작업입니다. 'UserRegister' 클래스에있는 메소드 이름은 모든 단계에서 수행 할 것을 알려줍니다. – Azodious

+0

당신이 위에서 쓴 방법과 같다고 상상해보십시오. 그러면 어떻게해야합니까? – Abhi

0

많은 MVC 프레임 워크 중 하나를 살펴볼 수 있습니다. 매개 변수를 양식으로 추출한 다음 비즈니스 계층을 사용하여 처리하고 데이터베이스 액세스를 위해 지속성 계층을 처리합니다.

많은 MVC 프레임 워크의 예와 다른 Java 프레임 워크와 통합하는 방법에 대한 예제는 AppFuse을 확인하십시오. 비록 당신이 그것을 사용하지 않더라도, 프레임 워크의 이러한 조합이 얼마나 다양한 기술을 평가하여 3 단계 환경을 만들 수 있는지에 대한 훌륭한 비디오가 있습니다.

0

일반적으로 기능을 여러 조각으로 나누는 것이 좋습니다. 이렇게하면 각 파트를 개별적으로 단위 테스트 할 수 있습니다. 양식의 입력에서 사용자 객체를 만듭니다. 그런 다음 데이터 액세스 레이어를 호출하여 사용자를 저장합니다.

MVC에서 읽으십시오. 저는 개인적으로 Spring MVC를 좋아합니다. 개체의 양식에서 정보를 얻을 수 있습니다. 그런 다음 서비스 계층을 사용하여 필요한 모든 변환 작업을 수행합니다. 거기에서 사용자를 유지할 수 있습니다.

0

생성자는 주로 개체가 만들어지는 초기화 작업용입니다. DB에 저장하는 모든 논리를 몇 가지 방법으로 옮길 것입니다. 또한 DB에 데이터를 저장하는 과정에 많은 시간이 걸리면이 사용자의 "스레드"에 매달리는 것이 좋지 않습니다. 비동기식으로 작업 할 수 있습니다. 서블릿 3에서 비동기가 지원됩니다.

다른 사람이 말했듯이, Spring MVC는 매우보기 좋은 곳이다. 수업 시간에

0

나는이 접근 방식을 좋아하지 않습니다. 정확히 UserRegister[] ur = new UserRegister[10]은 무엇을할까요? UserRegister ur = readfromDatabase(...)이 있다면 어떻게 될까요? 이 함수는 반환 할 UserRegister을 생성해야하므로 데이터가 데이터베이스에 다시 저장됩니다. 이상하고 혼란 스럽다. 데이터베이스가 아닌 파일로 저장하려면 어떻게해야합니까?

데이터 개체 생성을 데이터 지속성에서 분리하는 것이 좋습니다.

+0

정확히 데이터 지속성이란 무엇입니까? 그리고 좀 더 자세히 대답 해주세요 – Abhi

+0

데이터 지속성 = 메모리 외부의 데이터 저장. –

관련 문제