Я не знаю, какую функциональность вы хотите использовать из этих модулей, но если все они в значительной степени сделают то же самое, вы можете определить общий интерфейс и иметь 3 адаптера, которые сделают ваши модули подходящими для этого интерфейса.
interface ITrackingSdk
{
void StartSession(string[] identifiers);
...
}
class FacebookTrackingSdk : ITrackingSdk
{
private YourFacebookModule facebook;
public static bool IsSupported { get { return true; } }
public void StartSession(string[] identifiers)
{
facebook.InitializeBla(...);
}
...
}
class CountlyTrackingSdk : ITrackingSdk { ... }
class AdjustTrackingSdk : ITrackingSdk { ... }
Тогда у вас есть завод, который может создавать экземпляры ваших реализаций ITrackingSdk, в зависимости от поддержки на текущей платформе.
class TrackingSdkFactory
{
public ICollection<ITrackingSdk> CreateSupportedTrackingSdks()
{
List<ITrackingSdk> sdks = new List...
if (FacebookTrackingSdk.IsSupported)
sdks.Add(new FacebookTrackingSdk());
if (CountlyTrackingSdk.IsSupported)
sdks.Add(new CountlyTrackingSdk());
if (AdjustTrackingSdk.IsSupported)
sdks.Add(new AdjustTrackingSdk());
return sdks;
}
}
И, наконец, вы могли бы иметь какой-то контроллер, который на старте просит завод предоставить все поддерживаемые отслеживания SDKs, а затем управляет ими.
И если люди говорят вам придерживаться своих целей ниже, просто игнорируйте их. Стремитесь высоко и узнайте, что вам нужно, чтобы добраться туда.
«Привет, ребята, новые для развития» - возможно, попробуйте что-то менее амбициозное - «привет мир!» - это обычное стартовое место –
несколько раз вам нужно бежать до того, как вы сможете ходить –
И иногда вам нужно понимать свои ограничения .. .. –