Я пытаюсь увеличить мое повторное использование кода здесь. У меня есть SearchQueryDto
с полями, как ниже:Свойства совместного использования среди нескольких классов C#
public class SearchQueryDto{
// some other properties
public string SearchUsername { get; set; } // repetition 1
public string SearchProfile { get; set; } // repetition 1
public SearchInterest SearchInterest { get; set; } // repetition 1
// some other properties
}
Тогда, у меня есть модель базы данных для Broadcast
со следующим:
public class Broadcast {
// some other different properties
public string SearchUsername { get; set; } // repetition 1
public string SearchProfile { get; set; } // repetition 1
public SearchInterest SearchInterest { get; set; } // repetition 1
// some other different properties
public Status Status {get; set;} // repetition 2
public DateTime DateStarted {get; set;} // repetition 2
}
Тогда у меня есть модель базы данных для BroadcastMessage
со следующим:
public class BroadcastMessage {
// some other properties
public Status Status {get; set;} // repetition 2
public DateTime DateStarted {get; set;} // repetition 2
}
Как можно заметить, добавляя новые критерии поиска означает, что я должен пойти и добавить поля как моя модель базы данных Broadcast
И DTO. Как я могу делиться свойствами между двумя классами? Наследование, похоже, не является ответом, потому что я могу поменять свойства между Broadcast
и некоторым другим типом.
Я ищу что-то простое, как:
// handles repetition 1
public class SearchCriteria{
public string SearchUsername { get; set; }
public string SearchProfile { get; set; }
public SearchInterest SearchInterest { get; set; }
}
// handles repetition 2
public class StatusProperties{
public Status Status {get; set;}
public DateTime DateStarted {get; set;}
}
public class SearchQueryDto: SearchCriteria{
// some other properties
}
public class Broadcast : SearchCriteria, StatusProperties{ // multiple inheritance :(
// some other different properties
}
public class BroadcastMessage : StatusProperties{
// some other properties
}
Я не думаю, что наследство будет работать из-за Broadcast
потребности, и я не думаю, что интерфейсы будут работать, потому что тогда я взял шаг в неправильном направлении - обновление n+1
вещей, а не просто n
вещи для удобства компилятора, обеспечивающие наследование (а не удобство, которое я ищу).
Я также не хочу скрывать эти свойства за созданием другого класса по причинам, которые, по моему мнению, являются вне сферы охвата.
Возможно, решение состоит в том, чтобы создать промежуточный класс, который будет содержать общие свойства, которыми вы хотите поделиться, тогда оба класса имеют ссылку на этот класс ... –
@SuperPeanut - Мне это нравится ...но как мне перейти к биту ссылки, не вставляя эти объекты за другое свойство? – RobVious
Как насчет создания нового (может быть, абстрактного) типа над 2, заставляющего 2 наследовать этот новый тип. Кроме того, почему бы просто не использовать 1 тип, видя, что 2 имеют те же свойства. Если вам когда-либо приходилось добавлять новые свойства, которые не нужны одному из 2-х применений, вам просто нужно наследовать новый тип из этого. –