我有一个需要重构的照片服务。以下是目前的方法:
def getPhotoUrl(String publicId, String format) {
getCloudinary().url().format(format).transformation(new Transformation().width(288).height(194).crop("fill")).generate(publicId)
}
def getGalleryThumbnailUrl(String publicId) {
getCloudinary().url().format('jpg').transformation(new Transformation().width(205).height(205).crop("fill")).generate(publicId)
}
def getGalleryPhotoUrl(String publicId) {
getCloudinary().url().format('jpg').transformation(new Transformation().width(950).height(950).crop("fill")).generate(publicId)
}
照片服务方法都是从taglib调用的。
除了图像尺寸之外,这些方法非常相似,我还需要添加一些不同尺寸的方法。虽然我可以重构一个接受图像尺寸的方法,你会在哪里定义/传递这些尺寸?
- 将标签lib中的尺寸硬编码,并将它们传递给服务电话
- 在Config.groovy中输入尺寸,然后输入
服务从配置中加载它们
输入尺寸
Config.groovy,并将taglib加载/传递给服务
- 只需将它们硬编码在服务中。
尺寸很少会改变。
编辑:::修改代码
public enum PhotoSize {
GALLERY(grailsApplication.config.img.gallery.full.height, grailsApplication.config.img.gallery.full.width),
//def config = Holders.config
def grailsApplication
final int height
final int width
PhotoSize(int height, int width) {
this.height = height
this.width = width
}
public int getHeight() {
height
}
public int getWidth() {
width
}
}
答案 0 :(得分:0)
存储图片大小的另一种方法是拥有enum
之类的:
enum ImgSizeEnum {
THUMBNAIL(100, 100),
LARGE(200, 200)
private final int height
private final int width
ImgSizeEnum(int height, int width) {
this.height = height
this.width = width
}
public int getHeight() { return height }
public int getWidth() { return width }
}
然后在你的Taglib中你可以有一个代表enum
的param作为String
(为了获得它的大小):
ImgSizeEnum imgSizeEnum = ImgSizeEnum.valueOf("THUMBNAIL");
imgSizeEnum.getHeight()
imgSizeEnum.getWidth()
在此示例中,我在枚举中使用了硬编码的大小,但您也可以将这些值存储在Config.groovy
中。
修改强>
要从Config.groovy
获取高度/宽度,请添加文件中的每个值,如下所示:
img.thumbnail.height=100
img.thumbnail.width=100
或者使用以下语法:
img{
thumbnail{
height=100
width=100
}
}
然后在枚举类中注入grailsApplication
服务:
def grailsApplication
从配置文件中读取属性以初始化每个枚举:
enum ImgSizeEnum {
THUMBNAIL(grailsApplication.config.img.thumbnail.height, grailsApplication.config.img.thumbnail.width),
...
}