2010-05-28 4 views
0

관심과 시간에 감사드립니다. 기본적인 건축 문제에 대해 의견을 말 해주시기 바랍니다.클래스 수준에서 개인 공유 개체/변수를 사용하고 있습니까?

클래스 뒤에서 나는 개인 및 공유 객체 및 변수 (목록 또는 클라이언트 또는 simplay int id)를 사용하여 데이터베이스 또는 클래스 라이브러리에서 오는 데이터를 임시로 보관합니다. 이 객체는 일시적으로 데이터를 포착하고 반환하거나, 일부 함수를 전달하거나, 컨트롤을 바인딩하는 데 사용됩니다.

첫 번째 :이 접근 방법이 어떤 방식 으로든 해가 될 수 있습니까? 분석 할 수는 없지만 한 번에 여러 사용자가 요청을 보낼 때 이러한 공유 변수를 사용하여 데이터를 대체 할 수 있다고 생각 했습니까?

둘째 : DLL/데이터베이스에서 오는 데이터를 보관하기 위해 BLL에서 이러한 변수를 사용하는 것에 대해서도 의견을 말하십시오. 이 예제에서는 매번 BLL 클래스의 새로운 객체가 만들어 질 것입니다.

public class ClientManager 
{ 
    Client objclient = new Client(); //Used in 1st and 2nd method 
    List<Client> clientlist = new List<Client>();// used in 3rd and 4th method 
    ClientRepository objclientRep = new ClientRepository(); 

    public List<Client> GetClients() 
    { 
     return clientlist = objclientRep.GetClients(); 
    } 
    public List<Client> SearchClients(string Keyword) 
    { 
     return clientlist = objclientRep.SearchClients(Keyword); 
    } 

    public Client GetaClient(int ClientId) 
    { 
     return objclient = objclientRep.GetaClient(ClientId); 
    } 

    public Client GetClientDetailForConfirmOrder(int UserId) 
    { 
     return objclientRep.GetClientDetailForConfirmOrder(UserId); 
    } 
} 

내가 시간을 살려주는 친절 관심을 지불 당신에게 정말 감사드립니다 :

다음은 샘플 코드입니다.

답변

3

모든 페이지를 새로 고칠 때마다이 클래스의 새 인스턴스를 만드는 경우 각 요청이 모든 클래스의 인스턴스와 함께 실행되므로 문제가되지 않습니다.

+0

감사합니다. ck, 내가 설명했듯이 두 가지 다른 상황 1. 페이지 뒤에서. 2. 클래스 라이브러리. 페이지 클래스에서 클래스의 새 인스턴스를 만드는 중입니다 (페이지로드 메서드 위의) 일부 이벤트가 아닙니다. 같은 방식으로 BLL의 수업. – haansi

1

각 페이지에 대해 새 인스턴스를 만들고 GetClients()와 같은 함수가 무거 우면 모든 페이지/세션에 대해이를 실행하지 않고 대신 일부 캐싱 메커니즘을 사용하는 것이 좋습니다.

반대로 -이 클래스 시스템의 인스턴스가 하나만 있으면 동기화가 필요하므로 다른 스레드가 데이터를 읽는 동안 한 스레드가 데이터를 변경하지 않습니다.

+0

안녕 Itay, 페이지의 새로운 인스턴스를 만드는 방법을 이해하지 못합니까? 클래스에서 페이지가로드되기 전에 개체를 만듭니다. (어떤 경우에는 그렇지 않습니다.) 객체가 다시 생성 될 때마다이 방법을 안내해주십시오. 모든 페이지 요청에 대해 개별 객체가 생성됩니까? 감사합니다. – haansi

+0

어디에서 ClientManager의 새 인스턴스를 만드시겠습니까? –

관련 문제