课堂上使用方法的最佳实践

时间:2018-07-04 03:30:57

标签: class oop

假设我有Employee类,是否应该在Employee类中添加添加,删除,查看等方法?还是该类仅用于getter / setter类?

哪种方法更好/可以接受/最好?

Employee
-------------------
+int id (get/set)
+string name (get/set) (methods are called in another class)

Employee
-------------------
+int id (get/set)
+string name (get/set)
-add employee
-remove employee

6 个答案:

答案 0 :(得分:4)

这归结为separation of concerns

在决定这些事情时,您需要使用自己的直觉并进行逻辑思考。与员工有关的事情。

您有一个名为 <input type="text" id="someid" name="somename" <?php if($value) { echo 'readonly="readonly"'; } ?> value="<?php echo $value ?>"> 的类,然后在<script> function disableInputField() { if (document.getElementById("someid").value) { document.getElementById("someid").readOnly = true; } else { document.getElementById("someid").readOnly = false; } } </script> 类中包含与 Employee 有关的所有内容。员工能够<input type="text" id="someid" name="somename" <?php if($value) { echo 'readonly="readonly"'; } ?> value="<?php echo $value ?>" onblur="Javascript:disableInputField();"> Employee Employees 对他们自己没有意义。也许您要寻找的是Employee(复数)一类,它将管理您的员工部门。

但是您的Add“将”有RemoveEmployees以及其他与此有关的东西。

此处的目标是将您的概念尽可能地分解为具体的现实世界关注点,如果您这样做的话,则可以更轻松地理解设计

答案 1 :(得分:2)

假设您背后有一个数据库:

出于类似的目的,我为所有实体提供了一个基类,该基类负责处理CRUD功能和ID。所有实体都继承自该基类,并照顾各个属性,例如名称,地址等。

我还拥有用于管理其中项目的相同类型的所有实体的集合。

答案 2 :(得分:0)

简短回答:选择选项2

如果您考虑关注点的分离,则应该有一个 Employee 来跟踪一个人的信息,并需要一个 Employee Repository 来管理所有员工。记录的组成应独立于记录的存储/查询方式。

答案 3 :(得分:0)

Employee类具有雇员的信息以及雇员的方法。看起来您正在尝试维护一组员工(假设添加,删除员工要求)

在这种情况下,添加,删除,删除不是员工类的职责,而是员工的集合。

阅读OOP原则。

答案 4 :(得分:0)

面向对象设计的前五项原则(S.O.L.I.D)。

在员工之后

public class Employee :ViewModelBase, IEditableObject
{
   public int EmployeeID { get; set; }

   public string FullName
  {
     get
     {
         return $"{this.Name} {this.Surname}";
     }
   }

    private string _Name;
    public string Name
    {
        get { return _Name; }
        set
        {
           _Name = value;
           OnPropertyChanged("Name");
         }
     }
}

使用存储库创建泛型类以进行添加,删除,更新等操作后

public interface IRepository<T> where TEntity  : class
{
    IEnumerable<TEntity> GetUsers();
    IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate);
    TEntity GetById(int id);
    void Save(TEntity model);
    void Delete(int id);
}

和Employee Base实施存储库

public Class EmployeeManager : Repository<Employee>
{
    public IEnumerable<TEntity> GetUsers()
    {
       //your code
    }
    public IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate)
    {
       //your code
    }
    public TEntity GetById(int id)
    {
       //your code
    }
    public void Save(TEntity model)
    {
        //your code
    }
    public void Delete(int id)
    {
        //your code
    }

    public void DeleteAll(Employee[] employees)
    {
       //your code
    }
 }

Unity Repository Best Practices

答案 5 :(得分:-2)

我认为您应该在一个类中拥有所需的所有工具,并具有多个构造函数,以根据需要帮助仅加载信息。