I think Martin Fowler is great, but definitely don't want to do anything "because Fowler said". What is really needed, is to think about why he gave that advice, and see if those reasons apply for you.
The effect of creating a multi-item DTO here would be to protect yourself from needing to change the interface if you need to change the arguments for batch operations.
For example, if you have to add clientTimeStamp
to your parameters, it either looks like this:
private void UpdateItems(long clientId, DateTimeOffset clientTimeStamp, ItemDto[] items);
or this:
private void UpdateItems(ItemsDto itemsDto);
ItemsDto {
long ClientId;
DateTimeOffset clientTimeStamp;
ItemDto[] Items;
}
Also, notice that you can still use your old interface in a day-to-day way by creating an extension method that packs the arguments into your DTO.
So what's the benefit? The difference is that if your methods are public and used by many clients, you can maintain backwards compatibility the second way. It's also a bit easier to change your code, though with VS and resharper, it doesn't actually make much difference. The cost is a some amount of additional code to write (fairly small in the example, but probably larger in your real codebase).
If you expect to have client code outside your direct control (including clients you write but may not be able to update for some reason), a DTO here is probably worth the cost. Otherwise, I would leave it alone until next time I wanted to add a parameter there.