Попытка создать уровень абстракции для поддержки нескольких сторонних производителей в качестве системы управления документами. - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать библиотеку управления контентом для sharepoint , и в будущем мы могли бы иметь дело с любой CMS , например, google drive и т. Д.

Сейчас я использую sharepoint в качестве системы управления документами, поэтому я пытаюсь написать слой абстракции таким образом, чтобы независимо от того, какие cms мы используем, наш клиентский код не менялся. Он всегда должен работать с этой абстракцией.

Итак, это структура, которую я имею в виду:

У меня будет 1 ContentManagement.Library.Common, в которой будет абстракция, подобная этой:

public interface IContentRepositoryConnection : IDisposable
    {
        string Username { get; set; }
        string Password { get; set; }
        string ClientId { get; set; }    
        string ClientSecret { get; set; }
        void Create(); // handshake with sharepoint/google drive server using username/password or ClientId/Secret
    }

public abstract class ContentRepositoryConnection : IContentRepositoryConnection,IDisposable
    {
        public abstract string Username { get; set; }
        public abstract string Password { get; set; }
        public abstract string ClientId { get; set; }
        public abstract string ClientSecret { get; set; }

        public void Create()
        {
            throw new NotImplementedException();
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }

Вот мой отдельный Sharepoint.libraryкоторый будет работать с конкретным сервером apis и sharepoint для sharepoint:

public class SharepointConnection : ContentRepositoryConnection
    {
        //Where should i place SiteUrl Property which deal with sharepoint?
         //override relevant methods 
    }

Клиент (Console / Winform): будет иметь ссылку только на ContentManagement.Library.Common

Клиент всегда будет работать с классом ContentRepositoryConnectionтак что в будущем, если клиент может легко переключаться между sharepoint / google drive .

Теперь, чтобы создать ClientContext (как EF Dbcontext), есть пара параметров, которыеich sharepoints нужны такие, как SiteUrl, имя пользователя, пароль, которые могут отличаться от Google Диска, так как мне создать эту абстракцию?

Теперь предположим, завтра, если я изменю свой слой абстракции таким образом, чтобы он мог работать с Google Drive, а не сВозможно ли повлиять на клиент Sharepoint?

Вот как создается Клиентский контекст (а это все и есть Sharepoint):

var ctx = new ClientContext(siteUrl,username,password);

Я знаю каждый ORM какEF, dapper всегда работает с абстракцией (класс DbConnection) вместо класса Concrete (SqlConnection, OracleConnection и т. Д.), Поэтому я также пытаюсь добиться такой же абстракции в двух словах.

Может кто-нибудь пожалуйстанаправьте меня с некоторыми изменениями дизайна или структуры или можете предложить некоторые изменения в вышеупомянутой структуре, если таковые имеются?

...