LINQ определенно имеет свое место в специализированных базах данных и в предприятиях малого бизнеса.
, Но на крупном предприятии, где центральные базы данных служат концентратором общих данных для многих приложений, нам нужна абстракция. Мы должны централизованно управлять безопасностью и выставочными историями доступа. Нам необходимо сделать анализ влияния: если я делаю небольшое изменение модели данных для обслуживания новой бизнес-потребности, какие запросы должны быть изменены и какие приложения должны быть повторно протестированы? Представления и Хранимые процедуры дают мне это. Если LINQ может сделать все это и сделать наших программистов более продуктивными, я буду приветствовать его - у кого-либо есть опыт с помощью него в этом виде среды?
Вы должны добавить абстрактную заглушку метода:
public abstract ITask CreateTask(TaskId id);
Наследники могут затем переопределить его для реализации интерфейса.
Когда объект реализует интерфейс, он должен подчиняться всем ограничениям, применяемым интерфейсом. Это означает, что вы должны реализовать все свойства и методы, объявленные в интерфейсе.
В вашем случае вам не хватает реализации CreateTask. Также следует отметить, что C # использует свойства в отличие, например, от Java, в которой используются методы получения / установки. По этой причине вам не нужен метод SetName.
Ваш код должен выглядеть примерно так:
public abstract class TaskDefinitionBase : ITaskDefinition
{
private string name_ = null;
public abstract ITask CreateTask(TaskId id);
public string Name
{
get
{
return name_;
}
set
{
name_ = value
}
}
public bool HasName
{
get
{
return name_ != null;
}
}
}
TaskDefinitionBase должна включать CreateTask - если вы не хотите его реализовывать, просто отметьте метод как абстрактный, чтобы заставить любые реализующие классы реализовать его.