python - 一种在简单界面后转换和组合多种数据类型的模式

标签 python django design-patterns abstraction

我很难为小型事件日志记录框架概念化一个合理的抽象,而且在野外还没有遇到任何适用于此的可比较的东西。

概述:我们的 Web 应用程序需要从服务器端记录事件。事件数据经过 json 编码以写入平面文件。事件可能是页面浏览、注册、错误情况等。

所有事件都包含一组核心数据,例如网络请求信息和 session 状态。任何事件都应该能够定义要记录的附加数据。

理想情况下,触发事件的界面应该非常小。事件定义和数据要求应在单个配置文件中定义。数据验证和数据转换应该隐藏在这个配置文件后面。换句话说,记录事件的接口(interface)应该只需要一个事件名称和要转换并记录在事件中的数据结构。

我最初的想法是将单个数据结构映射到单个函数,该函数的职责是将数据结构转换为字典,最终合并到最终事件对象中,然后进行 json 编码并写入文件。我将这些称为“ Composer ”功能。在 Django 术语中,配置文件中的某些内容会将传递给 View 的 HTTP 请求对象映射到“request_composer”函​​数。该函数将构造一个从该请求对象中提取的数据字典。从 View 发出的事件需要传入该“请求”对象。

我想我的问题是是否有一种模式或抽象被我忽略了,它可以干净地转换任意数据结构并将它们合并到最终数据结构中。我觉得这种“单一数据类型映射到单一转换函数”有点笨拙和不优雅。当单个转换器接受多个参数是有意义的时,它也会崩溃。

最佳答案

这听起来很像 Facade(复杂实现的简单接口(interface)),可能结合了 Strategy(在运行时或配置/启动期间在流程的几个具体实现之间切换)和 Builder(提供复杂对象的通用抽象描述几种不同的策略可以转换为实际表示)。您可能会发现,一旦使用了 Strategy,就没有必要再使用 Facade。

http://en.wikipedia.org/wiki/Builder_pattern

http://en.wikipedia.org/wiki/Facade_pattern

http://en.wikipedia.org/wiki/Strategy_pattern

所以更具体一点:

Facade 将有两个方法:Log 和 SetLogger。

如果您使用原型(prototype),您将有一个事件类型,以及事件的每个组件的类型。如果您要记录一个非常复杂的事件,或者需要以几种非常不同的方式记录它,您将只使用 Prototype。

Logger(策略)将有一个接口(interface)。这在 Facade 中用于 SetLogger 方法。如果您使用的是 Prototype,Facade.Log 和 Logger.Log 的接口(interface)可能会有类似 log(PrototypeEvent e) 的方法。

点击下面的链接获取不使用 Prototype 但使用 Strategy 的简单记录器。这里没有 Facade,因为前端类实际上只跟踪当前记录器。

I am going to create simple logger using C# so what are the design patterns I can use to create this as best practice?

关于python - 一种在简单界面后转换和组合多种数据类型的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965314/

相关文章:

python - 用于快速绘制串行端口实时数据的语言和工具包

django - celery django守护程序上有多个 worker 和多个队列

python - 为什么 `url` 没有出现在 DRF 响应中

python - "Cannot find installed version of python-django or python3-django"运行 celeryworker 时

php - 将我的 PDO 连接保存为全局变量

java - Java中的继承问题

python - Rasa 核心训练命令 : unrecognized arguments

python - python 程序出错,可能与 vtk 有关。请帮助?

python - 我的 pyuic 转换后的文件无法打开

design-patterns - 我应该如何重构这个设计