在类级别使用私有共享对象/变量有害吗?

时间:2010-05-28 07:18:18

标签: c# asp.net architecture asp.net-2.0 asp.net-3.5

感谢您的关注和时间。我需要你对基本架构问题的意见。

在页面后面的类中,我使用私有和共享对象和变量(列表或只是客户端或simplay int id)来临时保存来自数据库或类库的数据。暂时使用此对象来捕获数据而不是返回,传递给某个函数或绑定控件。

第一:这种做法有害吗?我无法对其进行分析,但是当多个用户可能一次发送请求时,使用此类共享变量的想法可能会替换其中的数据?

第二:请评论在BLL中使用这些变量(保存来自DAL /数据库的数据)。在这个例子中,每次都会创建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);
    }
}

我真的很感谢你节省时间和关心。

2 个答案:

答案 0 :(得分:3)

如果您为每个页面刷新创建此类的新实例,那么它将不会成为问题,因为每个请求都将使用其自己的所有类的实例运行。

答案 1 :(得分:1)

如果要为每个页面创建新实例并且像GetClients()这样的函数很重,您可能要考虑不为每个页面/会话运行它,而是使用一些缓存机制。

反过来说 - 如果系统范围内只有一个这个类的实例,你需要同步,这样一个线程就不会改变数据而其他线程读取它。