2011-07-15 64 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); 
} 
相關問題