我正在尝试为 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等。),因此我也在尝试实现相同的抽象简而言之。
有人可以指导我进行一些设计更改或结构吗?或者可以建议在上述结构中进行一些更改?