Простой репозиторий для .Net 2.0 - PullRequest
1 голос
/ 24 марта 2011

Я пытаюсь использовать шаблон репозитория для сайта, созданного в .Net 2.0. Весь код клиента ожидает данных для привязки, и я не смогу это изменить, поэтому, пожалуйста, потерпите меня.

У меня (возможно, глупая) проблема. Я не могу понять, как передать строго типизированную сущность в мой конкретный репозиторий. Интерфейс вынуждает меня передавать тип Employee, но мне нужно передать тип Developer (он унаследован от Employee), поскольку у него есть определенные свойства, которых нет в базовом классе.

    public interface IEmployeesRepository
    {
        DataTable Employees { get; }
        void SaveEmployee(Employee employee);
        void DeleteEmployee(Employee employee);
    }

    public class DevelopersRepository : IEmployeesRepository
    {             
        public void SaveEmployee(Developer employee)
        {
            Database db = new SqlDatabase(connectionString);
            DbCommand dbCommand = db.GetStoredProcCommand("Developers_Insert",   employee.ProgrammingLanguage);
        db.ExecuteNonQuery(dbCommand);
            }
        }
    }

Я попытался использовать дженерики вместо этого, но тогда у меня все еще не будет строго типизированного объекта, верно?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

Я могу ошибаться, но звучит так, как будто вы хотите использовать общее ограничение:

public interface IEmployeeRepository<T>
    where T : Employee
{
    DataTable Employees { get; }
    void SaveEmployee(T employee);
    void DeleteEmployee(T employee);
}

public class DevelopersRepository : IEmployeeRepository<Developer>
{             
    public void SaveEmployee(Developer employee)
    {
        Database db = new SqlDatabase(connectionString);
        DbCommand dbCommand = db.GetStoredProcCommand("Developers_Insert",   employee.ProgrammingLanguage);
        db.ExecuteNonQuery(dbCommand);
    }
}
0 голосов
/ 24 марта 2011

DevelopersRepository реализует IEmployeesRepository, поэтому он должен реализовывать все методы в интерфейсе.

public void SaveEmployee(Employee employee)
{
    if (!(employee is Developer)) throw new Exception("...");
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...