我正致力于一个能够在两个宁静服务之间双向同步CRM数据的框架。
除此之外,我还定义了一组具有公共基类的对象,以及一些表示同时具有公共基类的服务的类。
我为对象和服务定义了一些稀疏接口。
我遇到的一个问题是如何以及在何处存储有关宁静通信的信息。例如,要在一个服务上创建或更新客户,它必须使用" / customer"和PUT。如果我想在另一方面做,那么" /个人"和POST。等等。
到目前为止,我已经创建了一个可重复使用的" RestConfig"能够持有这些信息的类。
由于此特定于服务的API信息不太可能发生变化,因此我将其存储在对象中,以便在需要时进行调用。它很容易完成,但我真的很想强制为我创建的继承的基本SERVICE类的每个实例添加这个类对象。
我这样做部分是为了学术界的练习,要了解这是否可行。我已经知道如何通过添加RestConfig类型的公共属性并手动保湿来实现它...但我离题了。
我的同事告诉我,我应该在服务中定义它,但我的目标是创建一个非常简单的模型,一旦配置完成,你只需要使用object.save(serviceEnvironment);
我老实说非常接近有一个有效的例子,但我真的想知道它是否有可能做我上面解释过的。
对不起,如果这太荒谬了。我期待看到一些问题......我将进行编辑以澄清。
编辑1:分享代码
对象示例:
public class Customer :
EntityBase
{
public Customer() : base(new EntityBaseConfig("customer", Customer.RestFullConfig))
{
}
[MagentoJsonDetails(PropertyName = "website_id", IsId = true, BasePath = JsonDetailsBase.JsonBasePath.Root, JsonValueType = typeof(int))]
public int WebsiteId => 1;
[MagentoJsonDetails(PropertyName = "store_id", IsId = true, BasePath = JsonDetailsBase.JsonBasePath.Root, JsonValueType = typeof(int))]
public int StoreId => 1;
[MagentoJsonDetails(PropertyName = "addresses", BasePath = JsonDetailsBase.JsonBasePath.Root, JsonValueType = typeof(List<Address.Address>))]
public List<Address.Address> Addresses { get; set; }
[MagentoJsonDetails(PropertyName = "group_id", IsId = true, BasePath = JsonDetailsBase.JsonBasePath.Root, JsonValueType = typeof(int))]
[UseInHash(Position = 12)]
public int GroupId { get; set; }
服务示例:
public class MagentoSttiService : SttiServiceBase, ISttiService
{
public SttiServiceEnvironment SttiServiceEnv { get; set; }
public MagentoSttiService() : this(null)
{
}
public MagentoSttiService(SttiServiceEnvironment env)
{
this.SttiServiceEnv = env;
}
public string SimpleGet(EntityBase entity, string json)
{
throw new NotImplementedException();
}
public string SimpleDelete(EntityBase entity, string json)
{
throw new NotImplementedException();
}
public string SimpleSave(EntityBase entity, string json)
{
Dictionary<SttiServiceBase.RestFullServiceConfig, string> restConfig = entity.EbConfig.RestFullConfig;
string method = restConfig[SttiServiceBase.RestFullServiceConfig.Method];
string url = restConfig[SttiServiceBase.RestFullServiceConfig.Url];
if (entity.NKIId > 0)
{
method = WebRequestMethods.Http.Put;
url += entity.NKIId.ToString();
}
return this.MakeCall(method, url, json);
}
如何使用它的例子:
string json = "{\"id\":30,\"group_id\":98,\"default_billing\":\"2\",\"default_shipping\":\"2\",\"created_at\":\"2016-10-31 14:42:59\",\"updated_at\":\"2016-10-31 15:16:30\",\"created_in\":\"Default Store View\",\"dob\":\"1980-07-09\",\"email\":\"mitch@stti.org\",\"firstname\":\"Mitchell\",\"lastname\":\"Thompson\",\"middlename\":\"David\",\"prefix\":\"Mr\",\"suffix\":\"na\",\"gender\":1,\"store_id\":1,\"website_id\":1,\"addresses\":[{\"id\":2,\"customer_id\":30,\"region\":{\"region_code\":\"IN\",\"region\":\"Indiana\",\"region_id\":24},\"region_id\":24,\"country_id\":\"US\",\"street\":[\"550 West North Street\",\"IT Department\"],\"company\":\"Sigma Theta Tau Intlll\",\"telephone\":\"7655555555\",\"postcode\":\"46202\",\"city\":\"Indianapolis\",\"firstname\":\"Mitchell\",\"lastname\":\"Thompson\",\"middlename\":\"D\",\"default_shipping\":true,\"default_billing\":true,\"custom_attributes\":[{\"attribute_code\":\"cxa_key\",\"value\":\"5ecc8a60-8878-4c87-9734-26fc83dca15c\"}]}],\"disable_auto_group_change\":0,\"custom_attributes\":[{\"attribute_code\":\"stti_position\",\"value\":\"450,451,452\"},{\"attribute_code\":\"cst_key\",\"value\":\"3b4d43ba-bcc7-4255-9d25-d79f0035b7f6\"},{\"attribute_code\":\"constit_id\",\"value\":\"123456\"},{\"attribute_code\":\"cust_save_hash\",\"value\":\"thisIsATestHashThing\"},{\"attribute_code\":\"stti_specialty\",\"value\":\"413,414,415\"}]}";
SttiServiceEnvironment sse = new SttiServiceEnvironment("http://192.168.5.65", "quwtldm4xa1a8bx1lncvwdlchuum1iee");
// Newtonsoft parse the data into an object
JObject data = JObject.Parse(json);
// This just makes json into a Customer object
MagentoJsonConverter jConverter = new MagentoJsonConverter(typeof(MagentoJsonDetailsAttribute));
Customer customerObjectData = jConverter.ConvertTo<Customer>(data);
// Fricken save for Magento
customerObjectData.Sync<MagentoSttiService>(jConverter, sse);
编辑2:将此添加到我的对象的基类
public virtual void Sync<T>(IJsonConverter jConverter, SttiServiceEnvironment servEnv) where T : ISttiService, new()
{
// Pass arguments to T() that are defined in the interface
ISttiService srv = new T() { SttiServiceEnv = servEnv };
string json = jConverter.GetJson(this);
srv.SimpleSave(this, json);
}