在 PHP 裡面,很多時候我們會用到 Hash 來傳遞變數,像是 $something['abc']['def'] 之類的方式,或許這是一個在效率上面很好的實做方式,但是總是...怪怪的,不是那麼的優雅。在 Rails 裡面,難免會有 controller 傳遞變數到 view 裡面的時候,這個時候通常是用 flash 這個內定的 Hash 來傳遞,但是也會遇到相同的問題,就是 Hash 實在是不夠物件導向。
flash[:somthing][:abc][:def]這樣的寫法到底是好還是不好呢?很多時候我很想說服自己這樣就好了,code work 即可,但是心中把這種事情物件導向化的想法一直沒變。所以我就開始 survey ,該怎麼作會比較 OO 呢?
我將訊息傳遞的 Object 宣告成一個 Model 上面好不好?code 很好看,可是心理總覺得小題大作了點,明明一個 Hash 就可以解決的事情,需要特別使用一個 Model 物件來寫嗎?有沒有辦法可以超快速的把訊息傳遞包成一個簡單的物件,而且裡面不需要 method ,只需要幾個 message 的 attribute 即可?
我看到了
Struct ,他的作法很簡單
宣告一個 class definition
class_def = Struct.new( :name, :address, :zip )
就是宣告一個 class 的定義叫做 class_def,裡面一共有 name ,address,zip 幾個變數。
New Object
當我們需要 new 一個 object ,我們把他叫做 obj
obj = class_def.new
如此即可。以後就可以這樣使用
obj.name
obj.address
obj.zip
Constructor
一開始,所有的變數都是 nil,這是因為沒有 constructor去宣告初始值。在 Struct 裡面有辦法達成嗎?當然有,在 new 這個 object 時這樣作
obj = class_def.new( 'a' , 1 , '123')
即可。
我的使用方式
我常常這樣使用Struct 來做 message passing 的 object,一行即可做到 new 一個我自己定義的 message object
msg = Struct.new( :error , :alert , :warning).new
如此的寫法對我來說,比 flash[:error] 來的更為優雅。
這個東西與其說是技巧,不如說是一個物件導向的偏執分子的固執行為,沒什麼了不起。你依舊可以用 Hash 達成每一件 Struct 做的到的事情。
分享到:
相关推荐
赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...
这个工具的目的是提供一种深度比较的方式,确保在比较复杂数据结构时,包括内部的哈希(hash)结构也能得到正确的比较结果。这对于编写单元测试来说尤其重要,因为单元测试通常需要精确地验证函数或方法的输出是否与...
构造将字节解释为打包的二进制数据##安装Gradleimplemention ' com.lingyun.lib:jstruct:0.0.8 '玛文< dependency> < groupId>com.lingyun.lib</ groupId> < artifactId>jstruct</ artifactId> < version>0.0.8...
赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...
Api-api_struct.zip,具有响应序列化apiStruct的api包装生成器由两个主要接口组成:apiStruct::客户端和apiStruct::实体。客户机类旨在使用相同的接口来描述对不同api的请求。实体使您能够使用类似于orm的api...
赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...
赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...
名称DBIx :: Struct-具有类:: Struct的行对象的便捷SQL函数概要use DBIx::Struct;DBIx::Struct::connect($data_source, $username, $auth);my $row = one_row("table", $idField);print $row->field;$row->field('...
赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...
赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...
它通过代码生成的方式,极大地提高了在Spring框架中进行对象复制的效率,相比传统的`Spring BeanUtils`或者`ModelMapper`等工具,MapStruct具有更高的性能和更简洁的API。本文将深入探讨MapStruct的工作原理、优点、...
1. **声明式语言**:Kaitai Struct 的语法允许开发者用一种直观的方式描述二进制数据的结构,而无需关注底层的解析细节。这种抽象让代码更易于理解和维护。 2. **多语言支持**:Kaitai Struct 可以生成多种编程语言...
Cstruct-直接从OCaml访问类似C的结构 %%版本%% Cstruct是一个库和语法扩展,可让您更轻松地直接从OCaml访问类似C的结构。 它支持对这些结构的读取和写入,并且可以通过Bigarray模块对其进行访问。 安装 该存储...
数据结构一个简单的gem,在Ruby中提供了几个有用的数据结构。 ##用法安装gem: gem install data - struct 或在Gemfile中要求: gem 'data-struct' 然后跑 bundle install要使用gem,请通过DataStruct模块(可选)...
作为依赖使用配置您的 Maven、Gradle 或 SBT 构建脚本以使用 Sonatype OSS 发布存储库并将依赖项添加到 Scala Struct。 Gradlerepositories { maven { url " ...
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
MapStruct-Java Bean映射,简单方法!什么是MapStruct? MapStruct是一个Java用于为Java Bean类生成类型安全和高性能的映射器。 它使您不必手工编写映射代码,这是一个繁琐且容易出错的任务。 该生成器具有合理的...
赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....
赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....
赠送jar包:mapstruct-processor-1.2.0.Final.jar; 赠送原API文档:mapstruct-processor-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-processor-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct...