假设我有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
答案 0 :(得分:4)
在决定这些事情时,您需要使用自己的直觉并进行逻辑思考。与员工有关的事情。
您有一个名为 <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
“将”有Remove
和Employees
以及其他与此有关的东西。
此处的目标是将您的概念尽可能地分解为具体的现实世界关注点,如果您这样做的话,则可以更轻松地理解设计
答案 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
}
}
答案 5 :(得分:-2)
我认为您应该在一个类中拥有所需的所有工具,并具有多个构造函数,以根据需要帮助仅加载信息。