Right now it's not possible to compose macros in a single computed property. It will be possible when this PR (https://github.com/emberjs/ember.js/pull/3696) is merged. We have to use a simple computed property.

The best option I can think right now (regarding performance), is this:
```javascript
isValid: function() {
    return !this.get('validators').any(function(validator){
      return validator && !validator.get('isValid');
    });
  }.property('validators.@each.isValid'),
```  

This does not use `compact`, so it will not create a new array and it will stop as soon as it finds an invalid validator. 

To make it more readable, we can define the `isInvalid` property in the validators. Then we can avoid this negation `!validator.get('isValid')`.