Должен ли я идти в тесном соединении, с синглтоном или слабо связанным, без синглтона? Azure Services, Xamarin Forms

Я делаю Xamarin Forms Cross платформенное приложение. Я пытался понять, как лучше всего интегрировать мое приложение с бэкэндом Azure. Я столкнулся с проблемой. Это было пробурено в моей голове, чтобы попытаться построить программы как можно слабосвязанными. Но затем мне сказали создать свой класс служб Azure как одноэлементный, чтобы остановить несколько созданий и испортить внутреннее соединение.

Так как я не могу использовать интерфейсы с одиночкой, чтобы мое приложение было слабо связанным. Я должен выбрать. Я думаю, что я должен пойти с интерфейсами, для слабой связи. Но я не знаю много о бэкэнд-разработке. Не удастся ли создать несколько экземпляров моего класса базы данных Azure Services?

Спасибо за любую помощь.

Вот пример формата моих Azure Services

namespace CoffeeCups
{

public class AzureService
{

public MobileServiceClient Client { get; set; } = null;

 IMobileServiceSyncTable<CupOfCoffee> coffeeTable;

public static bool UseAuth { get; set; } = false;

        public async Task Initialize()
        {
            if (Client?.SyncContext?.IsInitialized ?? false)
                return;


            var appUrl = "https://chattestjbapp.azurewebsites.net";


            //Create our client

            Client = new MobileServiceClient(appUrl);


            //InitialzeDatabase for path
            var path = "syncstore.db";
            path = Path.Combine(MobileServiceClient.DefaultDatabasePath, path);

            //setup our local sqlite store and intialize our table
            var store = new MobileServiceSQLiteStore(path);

            //Define table
            store.DefineTable<CupOfCoffee>();


            //Initialize SyncContext
            await Client.SyncContext.InitializeAsync(store);

            //Get our sync table that will call out to azure
            coffeeTable = Client.GetSyncTable<CupOfCoffee>();


        }

        public async Task SyncCoffee()
        {
            try
            {
                if (!CrossConnectivity.Current.IsConnected)
                    return;

                await coffeeTable.PullAsync("allCoffee", coffeeTable.CreateQuery());

                await Client.SyncContext.PushAsync();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Unable to sync coffees, that is alright as we have offline capabilities: " + ex);
            }

        }

        public async Task<IEnumerable<CupOfCoffee>> GetCoffees()
        {
            //Initialize & Sync
            await Initialize();
            await SyncCoffee();

            return await coffeeTable.OrderBy(c => c.DateUtc).ToEnumerableAsync(); ;

        }

        public async Task<CupOfCoffee> AddCoffee(bool atHome, string location)
        {
            await Initialize();

            var coffee = new CupOfCoffee
            {
                DateUtc = DateTime.UtcNow,
                MadeAtHome = atHome,
                OS = Device.RuntimePlatform,
                Location = location ?? string.Empty
            };

            await coffeeTable.InsertAsync(coffee);

            await SyncCoffee();
            //return coffee
            return coffee;
        }



        public async Task<bool> LoginAsync()
        {

            await Initialize();

            var provider = MobileServiceAuthenticationProvider.Twitter;
            var uriScheme = "coffeecups";



            var user = await Client.LoginAsync(Forms.Context, provider, uriScheme);


            if (user == null)
            {
                Settings.AuthToken = string.Empty;
                Settings.UserId = string.Empty;
                Device.BeginInvokeOnMainThread(async () =>
                {
                    await App.Current.MainPage.DisplayAlert("Login Error", "Unable to login, please try again", "OK");
                });
                return false;
            }
            else
            {
                Settings.AuthToken = user.MobileServiceAuthenticationToken;
                Settings.UserId = user.UserId;
            }

            return true;
        }    
    }
}

0 ответов