【问题标题】:Collect information in mobile application在移动应用程序中收集信息
【发布时间】:2014-01-16 20:09:01
【问题描述】:

我使用 Xamarin 框架开发了一个移动应用程序。

我想在移动应用程序运行期间收集一些信息并将其发送给某个接收器。信息是消息[Event, Action, Arguments (Name-Value pair list)]

现在,我有一个大型静态类,其中包含许多在不同应用程序位置调用的方法。这使我能够拥有强类型的消息及其论点。问题:很难维护许多类似的方法和字符串常量。

是否有任何设计模式可以做这些事情...也许我应该将所有允许的消息存储在一个 XML 文件中并自动生成 c# 方法...这通常是如何完成的?

【问题讨论】:

  • 您可能会在 Programmers Exchange 上取得更大的成功。
  • 我可以将问题分享给程序员交流,还是我应该复制/粘贴它?
  • 我认为复制并粘贴它然后删除它是你最好的选择。我真的很惊讶没有人因为把它放在这里而激怒你。

标签: c# design-patterns xamarin mobile-application


【解决方案1】:

其实我觉得你的问题很好。

以下是我将如何设计您的课程,我不会将其设为静态。

enum Event { /* names here */ }
enum Action  { /* names here */ }
class Arguments { / * properties here for each possible argument */ }

interface IServer { /* include methods on server class */ }

class Server : IServer
{
    public Task Send(Event evt, Action action, Arguments args) { /* code here */ }
}

这里有几点:

  • 尽可能使用枚举而不是字符串
  • 如果您有一个可能的参数列表,请为每个参数创建一个具有属性的类。这样您就不必记住任何名称或创建一个充满常量的类。
  • 我从方法中返回一个Task,所以你可以使用async/await
  • 我不喜欢静态类,因为我更喜欢使用某种服务位置或 IoC 容器。例如来自 Field Service 示例应用程序的 this class
  • 除非您正确处理静态数据,否则它们在 Android 上的表现也不好。
  • 使用接口让您可以灵活地在以后更换类。如果需要,您还可以针对假服务器编写单元测试。

【讨论】:

  • 当然,我知道ioc和静态类是一种简化......但是不同的事件有不同的动作。现在这个逻辑封装在方法中。如果我创建枚举或类,对于 100 个事件,我必须为操作实现 100 个其他枚举(或类)......这太过分了......
  • 因此,如果选择学习 100 个魔术字符串或拥有enum,我认为enum 会更好,对吧?然后你就知道你选择的是正确的,没有错别字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多