2011-07-15 50 views
2

我有一个对象在前端的几个方法中使用。我该如何做到最好?每次创建新实例?或做公开?或者是其他东西?这对我来说似乎很基本。用不同的方法访问一个对象的好方法是什么

public class Employee 
    { 
    public void DeleteEmployee(int employeeId) 
      { 
       ...... 
      } 

    public void UpdateEmployee(int employeeId) 
      { 
       ...... 
      } 

} 

,然后在前端(这就是我如何做到这一点):

protected void OnDelete(object sender, EventArgs e) 
     { 
     Employee emp = new Employee(); 
      emp.DeleteEmployee(empId); 
     } 
protected void OnUpdate(object sender, EventArgs e) 
     { 
     Employee emp = new Employee(); 
      emp.UpdateEmployee(empId); 
     } 
+0

你需要添加一些样品码。这个问题太模糊了。如果您创建了一些自定义对象的实例并将其传递给您的几种方法中的每一种,则它们应该都可以访问它并进行更新等。 –

+0

好的。给我一秒钟。 – user194076

+0

请告诉我们您正在使用此物品的什么 –

回答

2

I想想你在找什么,我会称之为员工经理。两种常用的方法是使用静态方法创建一个独立的EmployeeManager对象来执行操作,或将静态方法添加到Employee对象。对于哪种方法是首选方法存在一些争议。然而,通常的思考过程是,Employee实例不应该知道它是如何被持久化的。所以,结果会是什么样子要么...

EmployeeManager.DeleteEmployee(empId); 

或...

Employee.DeleteEmployee(empId); 
+0

你说的是创建新的类employeeManager,不同之处是它有静态的DeleteEmployee,而员工类将保持现在的样子? – user194076

+0

号两者都有静态方法。差异主要是一场宗教辩论。我更喜欢将持久性方法分离出来,以便它们不会混淆实际的对象。但那纯粹是我的偏好。 –

+0

我还会将DeleteEmployee方法更改为接受员工对象而不是id。只是我的偏好(如果你决定让人们按名称挑选员工然后删除他们)。 –

1

让你的方法static

public static void DeleteEmployee(int employeeId) 
{ 
    ... 
} 

直接调用它Employee

protected void OnDelete(object sender, EventArgs e) 
{ 
    Employee.DeleteEmployee(empId); 
} 
+0

而且如果Employee将成为员工信息的容器(例如id,名称等),我会将DeleteEmployee和UpdateEmployee移出到他们自己的单独类中。 –

+0

困惑,你为什么要那样做?有什么好处? – user194076

+2

查看John Kraft的回答。如果您的“员工”对象存储有关单个员工的信息,则不应在同一“员工”对象中定义操作员工的职能(如删除他们)。像John建议的那样将它们粘贴到一个新的EmployeeManager类中。这只是一个逻辑分离。如果您有一个名为Car的对象,其中包含make,model,color等,则可以使用RepairCar(Car myCar)和PaintCar(Car myCar,Color color)等方法创建单独的类。这些方法不属于Car对象本身。 –

0

通常我会说的员工不应该负责创建/更新/删除自身。 Data上下文(或Repository,或其他)应该有这个责任。

所以你必须像(现成的,袖口,仔细检查拼写/语法)

EmployeeRepository //Normally Inherits a BaseRepository and/or implements an IRepository<T> 
{ 
    public void Create([some parameters here]) {...} 
    public void Delete(Employee employee) {...} 
    public Employee Find(Expression<Func<Employee, bool>> predicate) {...} 
    //other methods... 
} 

而且你的代码会打电话

static void Main() 
{ 
    EmployeeRepository Employees = new EmployeeRepository(); 

    Employee bob = Employees.Create("Bob"); 

    Employee fired = Employees.Find(e => e.Id == whatever); 
    Employees.Delete(fired); 
} 
相关问题