我是一个java我是一名开发人员,刚刚开始用Python工作。我写了一个AWS lambdapython 3.9中的代码。在第一次尝试中,我在一两个文件中编写了完整的代码。但是我在某个地方读到,我们不应该创建胖文件。然后我尝试将代码分离到不同的文件夹和文件中。诸如处理程序、服务、utils、dao、实体之类的文件夹。每个文件夹有一个文件,每个文件都有一些函数,这些函数可以通过导入从另一个文件独立调用。然后,一位Python专家告诉我要应用面向对象的概念,并遵循DDD设计或MVC模式。是否有必要遵循面向对象的概念并在无服务器架构中创建类?你能给我指一些展示开发面向对象lambda的框架的GIT示例吗?AWS lambda在请求时被激活,并在服务请求时停止。它不像服务器,没有请求就24小时活跃。
在支持模块化编程的python语言的AWS lambda代码中,最好的设计模式、架构或编码范例是什么?这在很大程度上取决于你的用例。
Lambda是无状态的。在lambda中为大多数情况构建类没有什么意义,因为您不能将类实例化传递到lambda之外。(这意味着您必须在连续调用的不同lambda中再次重新实例化它)此外,由于Lambdas在时间和内存上的限制,最好是它们具有较小的作用域-它们做一两件事然后更新数据库或调用另一个lambda或在Step Function中继续。您可能创建的最有可能的类是Struct类型——python中并没有这种类型。python中的字典执行的功能与结构体基本相同,但开销要小得多。
干净的代码和TDD意识形态表明,最好在Lambda处理程序中有许多连续调用的小函数。这让您在测试组件时无需模拟一堆东西就可以获得更好的测试模式和行为测试。
它也有帮助,因为虽然您可以将lambda处理程序作为本地的任何其他函数运行,但如果您试图在lambda中使用其中的一些,则无法轻松访问模拟上下文,并且在本地运行而不是意味着lambda一旦部署就会成功运行。所以测试是好的,但不是确定的。但是,如果您可以验证所有较小函数的行为,那么在云中的lambda级别上进行故障排除的工作量就会大大减少。
对于任何其他架构模式…只要你觉得舒服就行。你可以让lambdas成为MVC中的控制器。然后,您可以围绕它组织文件结构。或者你可以收集一个域的λDDD和组织。老实说,一般来说没有最好的方法,只有对你的项目最有效和最高效的方法。
然而,当你进入多个lambda时,需要注意的一点是它们是如何部署的通过各种系统(比如CDK或Cloudformation。在这种情况下,最好让每个lambda在自己的目录中只在内部引用它自己(您必须在Python导入中获得乐趣才能使其在本地工作)尝试写作辅助函数到utils.py文件以便lambda_function.py文件并不大。您还可以编写异步函数来减少超时错误,因为每个lambda都有自己的执行超时。服务模式最适合这类服务。你可以通过在一个lambda中调用一个lambda来调用async函数。