ЯС
Size: a a a
ЯС
ЯС
ИИ
NM
Д
B
ЯС
ЯС
RS
interface StringService { String getString() }Всё обернули, как будто получилось красиво.
class StringServiceImpl implements StringService { String getString() { return "hi"; }
class EncodingStringServiceWrapper implements StringService {
private StringService stringService;
public EncodingStringServiceWrapper(StringService stringService) { this.stringService = stringService; }
public String getString() {
return base64encode(stringService.getString());
}
private String base64encode(String s) { return "encodedhi" }
}
class SigningStringServiceWrapper implements StringService {
private StringService stringService;
public SigningStringServiceWrapper(StringService stringService) { this.stringService = stringService; }
public String getString() {
return sign(stringService.getString());
}
private String sign(String s) { return "signedencodedhi" }
}
String result = new SigningStringServiceWrapper(Тут, вроде, всё понятно. Теперь скажем, что наша единица данных - это не String, а большая бинарная штука, получаемая как InputStream. Как будто всё должно быть также, но нифига, потому что результат обработки Стринга - это Стринг, а результат обработки InputStream сторонней библиотекой - это OutputStream.
new EncodingStringServiceWrapper(
new StringServiceImpl() // привет, Егор
)
).getString();
interface BinaryService { BinaryDto getBinaryDto() }Чувак до меня не парился и просто пробросил HttpServletResponse через все слои логики. Что я считаю некошерно.
class BinaryServiceImpl implements BinaryService { BinaryDto getBinaryDto() { return new BinaryDto(read inputSteam from source); }
ThirdPartyBinaryServiceWrapper implements BinaryService {
private BinaryService binaryService;
BinaryDto getBinaryDto() {
BinaryDto binaryDto = binaryService.getBinaryDto();
thirdParty.process(binaryService.getBinaryDto().getInputStream(), ??resultOutputStream??);
binaryDto.setInputStream(?? convert resultOutputStream to inputStream ??);
return binaryDto;
}
}
thirdParty.process? Вариант с временным new ByteArrayOutputStream приводит к зависанию программы - видимо, созданный поток не читается.
RS
interface StringService { String getString() }Всё обернули, как будто получилось красиво.
class StringServiceImpl implements StringService { String getString() { return "hi"; }
class EncodingStringServiceWrapper implements StringService {
private StringService stringService;
public EncodingStringServiceWrapper(StringService stringService) { this.stringService = stringService; }
public String getString() {
return base64encode(stringService.getString());
}
private String base64encode(String s) { return "encodedhi" }
}
class SigningStringServiceWrapper implements StringService {
private StringService stringService;
public SigningStringServiceWrapper(StringService stringService) { this.stringService = stringService; }
public String getString() {
return sign(stringService.getString());
}
private String sign(String s) { return "signedencodedhi" }
}
String result = new SigningStringServiceWrapper(Тут, вроде, всё понятно. Теперь скажем, что наша единица данных - это не String, а большая бинарная штука, получаемая как InputStream. Как будто всё должно быть также, но нифига, потому что результат обработки Стринга - это Стринг, а результат обработки InputStream сторонней библиотекой - это OutputStream.
new EncodingStringServiceWrapper(
new StringServiceImpl() // привет, Егор
)
).getString();
interface BinaryService { BinaryDto getBinaryDto() }Чувак до меня не парился и просто пробросил HttpServletResponse через все слои логики. Что я считаю некошерно.
class BinaryServiceImpl implements BinaryService { BinaryDto getBinaryDto() { return new BinaryDto(read inputSteam from source); }
ThirdPartyBinaryServiceWrapper implements BinaryService {
private BinaryService binaryService;
BinaryDto getBinaryDto() {
BinaryDto binaryDto = binaryService.getBinaryDto();
thirdParty.process(binaryService.getBinaryDto().getInputStream(), ??resultOutputStream??);
binaryDto.setInputStream(?? convert resultOutputStream to inputStream ??);
return binaryDto;
}
}
thirdParty.process? Вариант с временным new ByteArrayOutputStream приводит к зависанию программы - видимо, созданный поток не читается.
AE
C
C
RS
writePersonPhoto(Person person, OutputStream out)
тогда даRS
C
RS
C
Person person = service.getPerson(id);
httpServletResponse.setHeader("Last-Modified", person.getPhotoModifiedDate());
IOUtils.copy(person.getPhoto().getInputStream(), httpServletResponse.getOutputStream());
AE
C