интерфейсы классов в c # в классе модели (MVC) - PullRequest
0 голосов
/ 25 ноября 2011

Не могли бы вы помочь мне в приведенном ниже коде, правильно ли структурированы интерфейс и классы?

Я имею в виду, мне нужно иметь единственный метод в интерфейсе, который является loaddata (), но у меня есть 2 разных метода (возвращает списки), чтобы обслуживать 2 разные таблицы.

Классы EmployeeDetails и JobDetails являются классами только для чтения, и данные поступают для этого из внешней базы данных.

public interface IGetData
{
  public List<EmployeeDetails> LoadData{get;set;}
  public List<JobDetails> LoadData2{get;set;}
}

public  class EmployeeDetails : IGetData
{             
  public int EmployeeID { get; set; }
  public string EmployeeNumber { get; set; }
  public string EmployeePosition { get; set; }
  public string EmployeeDivision { get; set; }
  public string EmployeeName { get; set; }
  public string ApproverName { get; set; }
  public int ApproverID { get; set; }

  public EmployeeDetails()
  {
    public string LoggedInEmployeeName
    {
      get
      { 
        return System.Web.HttpContext.Current.User.Identity.Name;
      }
    }

    STASEntities STASContext = new STASEntities();

    public  List<EmployeeDetails> LoadData
    { 
      get
      {
        var EmployeeResults = from e in STASContext.Employee_VIEW
                              where
                              e.UserName == LoggedInEmployeeName 
                              select new EmployeeDetails
                              {
                                EmployeeDivision    = e.BusinessUnitName,
                                EmployeeID          = e.EmployeeId,
                                EmployeePosition    = " ",
                                EmployeeName        = e.EmployeeName,
                                ApproverID          =   e.EmpAppId,
                                ApproverName        =  e.ApproverName,
                                EmployeeNumber      = e.EmployeeNumber
                              };
        return EmployeeResults.ToList();  
      }
    }
  }
}

public class JobDetails:EmployeeDetails, IGetData//for future employee assigned against job.
{
  //  public IList<ContractDetails_View> JobNameList { get; set; }
  public int ContractID { get; set; }
  public string JobName { get; set; }
  public JobDetails() {
  public  List<JobDetails> LoadData2
  { 
    get
    {
      var jobResult = from c in STASContext.ContractDetails_View 
                      select new JobDetails
                      {                    
                        JobName=c.JobName,
                         ContractID = c.ContractId
                      };

      return jobResult.ToList();
    }
  }
}

1 Ответ

1 голос
/ 25 ноября 2011

Не зная больше о вашем коде, это будет немного больше догадок.Но ваш интерфейс выглядит неправильно.Это выглядит неправильно, потому что класс EmplyeeeDetails не вызывает функцию LoadData2, а JobDetails не вызывает функцию LoadData.

Похоже, у вас должно быть два отдельных интерфейса (и они больше похожи на функции, обладающие свойствами):

public interface IGetEmployeeDetails
{
  List<EmployeeDetails> LoadEmployeeDetails();
}

public interface IGetJobDetails
{
  List<JobDetails> LoadJobDetails();
}

А затем реализовать их отдельно:

public  class EmployeeDetails : IGetEmployeeDetails
{
  //class stuff
}

public class JobDetails : EmployeeDetails, IGetJobDetails
{
  //class stuff
}

Поскольку JobDetails наследует EmployeeDetails И реализует IGetJobDetails, ему будут доступны оба вызова интерфейса: LoadEmployeeDetails() и LoadJobDetails().

Возможно, вы сможете заменить оба интерфейса общей версией:

public interface IGetDetails<T> {
  List<T> LoadData();
}

Кроме этого, вам нужно будет указать, в чем именно заключается проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...