尝试创建抽象层以支持多个第三方作为文档管理系统

时间:2018-12-24 10:48:03

标签: c# oop design-patterns sharepoint abstraction

我正在尝试为 sharepoint 创建内容管理库,将来我们可以处理任何 CMS ,例如 google drive 等。

现在我正在使用共享点作为文档管理系统,因此我试图以一种方式编写一个抽象层,无论我们使用客户代码的cms都不应更改,它应该始终与该抽象一起工作。 / p>

这就是我想到的结构:

我将有1个public final class Selector { private String name; public Selector(final String name) { this.name = name; } @Override public String toString() { return name; } @Override public boolean equals(final Object object) { if (object instanceof Selector) { Selector target = (Selector) object; return target.name.equalsIgnoreCase(name); } return false; } @Override public int hashCode() { return toString().hashCode(); } } ,其抽象如下:

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(); } } ,它将处理特定于共享点的api和共享点服务器:

Sharepoint.library

客户端(控制台/ Winform):仅具有public class SharepointConnection : ContentRepositoryConnection { //Where should i place SiteUrl Property which deal with sharepoint? //override relevant methods } 的引用

客户端将始终与ContentManagement.Library.Common类一起使用,以便将来在客户端可以轻松地在 sharepoint / google drive 之间切换时使用。

现在,为了创建ClientContext(就像EF Dbcontext一样),共享点需要使用几个参数,例如SiteUrl,Username,password,这些参数可能与Google Drive不同,所以我该如何创建此抽象?

现在假设明天是否可以更改抽象层,使其可以与Google Drive一起使用并且不影响共享点客户端?

创建Client Context(这就是Sharepoint的一切)的方式:

ContentRepositoryConnection

我知道像EF,dapper 这样的每个 ORM始终都可以使用abstraction(DbConnection类)而不是Concrete类(SqlConnection,OracleConnection等。),因此我也在尝试实现相同的抽象简而言之。

有人可以指导我进行一些设计更改或结构吗?或者可以建议在上述结构中进行一些更改?

0 个答案:

没有答案