gpt4 book ai didi

c# - 在客户端和服务器端实现接口(interface)

转载 作者:行者123 更新时间:2023-11-30 22:12:47 27 4
gpt4 key购买 nike

我有一个客户端(Android 应用程序)和一个服务器(WebApi REST 网络服务)。

该应用程序有一个服务层,它调用该服务层与网络服务通信以读取和写入记录。返回值从网络服务的 Controller 发回(即,当新记录写入数据库并生成关联的记录 ID 时)。

我有许多不同的 Controller ,每个 Controller 都有多种方法,它们都返回不同数量和类型的值(它们主要返回 int 数组,但如果混合了非整数值,我偶尔会返回一个对象数组)。

应用程序端的服务层会执行一些检查来验证参数,例如检查参数计数(数组元素)和检查预定义的无效/未初始化值(如 -9999)。

我不想通过定义一个接口(interface)来形式化这些参数操作,以便在一个位置明确指定双方使用的参数的数量和类型(所以我不是在双方“即兴发挥” ).

但是,我遇到的难题是决定是定义一个接口(interface)来指定与客户端和服务器相关的方法,还是定义两个单独的接口(interface),每个接口(interface)都指定特定于通信端的方法。

如果我只有一个界面,像这样:

public interface IServiceParams
{
object[] CreateParams(int recordId, string recordNumber);

bool ParseParams(object[] paramz, out int recordId, out string recordNumber);
}

然后由于 CreateParams 只用在 WS 端,而 ParseParams 则用在 App 端,我将不得不在两边声明空的实现

网络服务端:

public class RecordController : ApiController, IServiceParams
{
object[] IServiceParams.CreateParams(int recordId, string recordNumber)
{
return new[] { newRecordId, newRecordNumber };
}

bool IServiceParams.ParseParams(object[] paramz, out int recordId, out string recordNumber)
{
throw new NotImpementedException();
}

////////////////////////////////////////////////////////////////////////////////////////////

public object[] Put( Record record )
{
if( !DbLayer.Update(record) )
{
return null;
}

return CreateParams(record.RecordId, record.RecordNumber);
}
}

应用端:

public class RecordService : IServiceParams
{
object[] IServiceParams.CreateParams(int recordId, string recordNumber)
{
throw new NotImpementedException();
}

bool IServiceParams.ParseParams(object[] paramz, out string recordNumber)
{
if( paramz == null || paramz.Count != 4 )
{
return false;
}

if(!ParseInt(paramz[0].ToString(), out recordId) || recordIdNew == DEFAULT_RECORD_ID)
{
return false;
}

// ...

return true;
}

////////////////////////////////////////////////////////////////////////////////////////////

public bool UpdateRecord( Record record )
{
object[] paramz = WebService.Put( record );

int recordId;
string recordNumber;

if(!ParseParams(paramz, out recordId, out recordNumber))
{
return false;
}

record.RecordId = recordId;
record.RecordNumber = recordNumber;

return true;
}
}

或者,我是否应该定义两个接口(interface),并在各自的端实现每个接口(interface),从而消除空实现的需要:

public interface IServiceParamsClient
{
bool ParseParams(object[] paramz, out int recordId, out string recordNumber );
}

public interface IServiceParamsServer
{
object[] CreateParams(int recordId, string recordNumber);
}

非常感谢您的帮助!

最佳答案

有什么理由需要在一个接口(interface)中声明这两种方法吗?如果没有,制作两个独立的界面,每个界面都反射(reflect)他们的意图。必须将方法实现为“不受支持”是一种设计味道。请参阅:What's the right way to design my interface when I have operations that aren't supported by all implementers?

关于c# - 在客户端和服务器端实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com